我在EC2上有一个中型服务器。 我不太了解Apache或者Tomcat,他们已经开始运行了,但除此之外,我还没有深入了解如何进行修补。 我知道我可以设置Tomcat服务器的最小/最大JVM大小,并且可以设置Apache可以分离多less个线程,但我不知道这些参数的“合理”值是多less。
谢谢。
编辑:
该系统是一个EC2中:
高CPU中等实例:
我运行的唯一服务是Apache和Tomcat。 没有其他的东西在服务器上。
阿帕奇
看看Apache自己的文档,它比我在这里更详细:
http://httpd.apache.org/docs/2.0/misc/perf-tuning.html
JVM
将JVM的Xmx设置为不超过总空闲物理内存的70%(大致)。 其原因是,perm gen和JVM库也占用了额外的空间 – 目标是整个进程内存永远不会使用虚拟/交换内存。 如果将此设置得太高,就会看到“GC超出限制”的问题。
您的GCalgorithm可能会对性能产生很大的影响 – 确保您使用的是某种forms的并行收集器,而不是串行的“暂停,标记和扫描”。 JVM通常为你自动进入服务器模式。
使用诸如JConsole或JVisual VM之类的工具来检查GC和实际使用的堆,然后调整以适应 – 堆太大会影响垃圾收集时间。
Tomcat的
至于HTTP连接器线程,在单个Tomcat实例上,根据您的应用程序,通常可以在线程数达到600之前遇到问题 – 但是,通常不需要这么高 – 只要给你的CPU和内存增加更多的压力。
一旦你对最大线程感到满意,我就设置minSpareThreads和maxSpareThreads 。 如果我知道我会受到新的连接尖峰的打击
接下来acceptCount 。 这是最大的排队连接 – 在使用连接器线程之后溢出此设置的连接将收到“连接被拒绝”。
作为一个微小的tweek,你可以设置enableLookups (允许DNS主机名查找)为false。 启用时,(稍微)影响性能。
另外,请查看Tomcat Native Library,它使用本地代码来提高某些操作(如文件IO等)的性能。
负载testing
对于基本的负载/性能testing,请查看Apache JMeter:
http://jakarta.apache.org/jmeter/
我们使用它来testing基本的页面加载性能,JMetertesting脚本使用了数百个并发请求。 你需要一个相当大的服务器来运行它(不是在运行Apache HTTPD和Tomcat的同一台机器上)。
堆,我会设置ms = mx = 1GB intially。 1.5如果你的应用程序是内存饿了。 在服务器环境中,我从来没有看到任何一点(或增益)variables堆大小。
线程池大小是它自己的一个章节。 主要是我在这里谈论Tomcat。
如果你的应用程序有很多同步部分(共享caching,外部资源/集成只有串行访问和什么),工作线程越多,他们花更多的时间只是等待对方。 根据你的规格,对你的应用程序一无所知,就线程池大小而言,我会说50作为一个起点。 你需要运行一些性能基准来正确调整它。 例如,使用jmeter,并创build一个testing脚本模拟您网站上的一个或几个主要使用案例。 使用2或3个临时EC2实例作为负载生成器(您只需要很短的时间),在其中运行jmeter-server应用程序。
运行testing场景,例如60,120,180和240个Jmeter请求线程以及30,50,70和90个tomcat工作线程。 比较服务器上的响应时间以及CPU和内存使用情况。 对于基本的CPU /内存信息,您可以使用JVM中的标准jconsole或visualvm信息。 您也可以使用详细的垃圾回收(GC日志logging)运行tomcat JVM,并使用tagtraums GC查看器来研究内存和GC行为。
与总堆(Xmx)相比,合理的起始值是25%新尺寸(Xms)
我build议你根据峰值负载来分析你的应用程序,并使用LambdaProbe或类似的软件来观察内存使用情况,看看你需要改变