java - Tomcat 7 性能问题 (WIN 7 x64)

标签 java mysql performance apache tomcat

我在 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/

相关文章:

java - 在构建路径中获取 JRE 系统库未绑定(bind)错误

java - 如何将两个项目添加到此可观察列表中?

php - php错误中的html表

php - 针对流量高峰优化服务器 (Drupal)

mysql - 简单 SQL 最大列查询

django - Redis 获取大字符串的速度很慢

java - 与 Java 的堆分配相比,为什么 C++ 堆分配这么慢?

java - AIR Java 扩展中的 vector 传输速度

java - Arrays.asList(array) 和 new ArrayList<Integer>(Arrays.asList(array)) 的区别

java - 如何创建 RowEncoder 以将 Tuple<A,Row> 映射到 Row?