我在 Win 7 x64(使用 jdk_1.8)上运行 Apache Tomcat 7,运行与 MYSQL 数据库结合的 Web 应用程序。当需要请求的设备 (TCP/IP) 增加时——一些设备没有及时响应——Apache 开始出现性能问题。我读过改变数据库的设置并不重要,尽管它已经准备好处理大型项目。所以假设这不是数据库故障,我仍然有 tomcat 设置的问题。 在 server.xml ( ~\apache\conf\server.xml) 我有以下设置:
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
maxThreads="1000" minSpareThreads="100"
connectionTimeout="20000"
acceptCount="500"
redirectPort="8443"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/javascript"
/>
Java JRE 设置: -Xms8192m -Xms16384 -Xss512k
在 Tomcat 中,我有以下设置: http://fotoo.pl/show.php?img=899435_1.png.html
Apache Tomcat 7 的打印屏幕生成许多异常和警告,因为池大小仍然很小,必须拒绝某些请求 http://fotoo.pl/show.php?img=899437_bezntytu-u.png.html
我的问题是如何设置这些设置(在 server.xml 和 Apache Tomcat Properties 中)如果我有专门运行此服务器的机器并且我有 32GB 高速缓存内存、处理器 Intel Core i7-4930K 3.30 GHz 和 SSD 磁盘提高我的 Tomcat 的性能。
如果您需要获得任何其他信息来回答我的问题,请大胆提问。
最佳答案
接受吧:Windows 并不是为 WebApps 提供服务的最佳操作系统。恰恰相反。文件系统非常糟糕(NTFS 和 ReFS 都比 untuned ext4 或 xfs 慢 20% 左右)。然后你有 GUI 的 RAM 开销。疯狂的内存管理基于未使用的 RAM 是好的 RAM(因为进程将来可能会请求一些)的想法,因此它会主动分页以保持尽可能多的物理 RAM 空闲。
acceptcount 值也没有意义:将大量请求放入队列无助于提高性能。它只是隐藏了实际的问题。将其设置为较低的值,因为这只是为了给峰值提供一个小的缓冲区。此外,它会占用执行作业的进程的 RAM。
Maxthreads 意味着您的数据库也可能打开多达 1k 个连接。我认为这是瓶颈。另外:如果您有 1k 个并发用户,这意味着每个用户只有 16MB 的 RAM 可用(是的,粗略计算,但这很明显)。根据您的应用程序,预计并发用户需要更多。我见过 RAM/并发用户超过 200MB 的应用程序。
总而言之,我要说的是,您必须同时进行纵向扩展和横向扩展。
完全有偏见的注释:如果机器是专用的,请使用 GNU/Linux 或 Unix。
关于java - Tomcat 7 性能问题 (WIN 7 x64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671824/