浏览 8968 次
精华帖 (0) :: 良好帖 (19) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-23
本人使用jdk6.0、tomcat6.0 1、 修改tomcat server.xml参数设置 <Connector port="80" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="75" maxSpareThreads="300" enableLookups="false" redirectPort="8443" acceptCount="200" connectionTimeout="50000" disableUploadTimeout="true"/> 主要修改了maxThreads、acceptCount。 引用 Google资料说“如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。”
2、 增加tomcat启动初始内存设置;catalina.sh – 增加了参数内存设置 增加设置 JAVA_OPTS="-server -Xms2048M -Xmx2048M -Xss128k -XX:+AggressiveOpts -XX:+UseParallelGC -XX:+UseBiasedLocking" 增加了JVM初始分配的内存 资料: 引用 Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同
堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。 非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 JVM内存限制(最大值) 首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。 3、 响应处理的servlet在系统启动时进行初始化,修改servlet load-on-strartup数值,可设0、1、2、3,值小的先初始化; 4、 修改linux系统资源数目的限制 a) ulimit -a 查看系统目前资源限制的设定。-- 可以看到默认1024 b) 大家可以看看这个帖子http://www.iteye.com/topic/65175 c) 我的修改方法是在文件/etc/security/limits.conf中增加行* - nofile 57766 5、 更改oracle连接数最大值,这个可找对应DBA搞定; 6、 上面是开始后做的操作,后来又使用了tomcat5.5 、 tomcat6中提供的连接池功能 Server.xml <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="75" maxSpareThreads="300" acceptCount="200"/> <Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="30000" redirectPort="8443" /> 以上是我所做的配置,有不合理或者还未做到的优化操作,还希望能够提出来; 对系统的并发其实还是有很多不理解的地方,欢迎讨论。 谢谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-23
最后修改:2008-12-23
兄弟, 研究的不错, 但是细节上, 还需要深入, 有些参数配置的过于粗糙。
1。 tomcat的线程数量有待商榷。 thread太多,导致切换过多,性能下降严重。这个数量应该是你单个机器的承载能力, 压力测试下得出的结果。 不可任意加大。一般情况下, 256-512个已经非常高的数值了。 2。JVM参数配置, 你这个会导致严重的stop world时间。 如果你想应用响应平缓, 一般看你的应用对于临时内存的需求, 一般来说, -Xmn128-256m就够了, 这个要看你的停顿时间的计算, 你把gc的收集打印出来,再研究下, 最大停顿时间。 这个我的BLOG说的比较详细。 你去看看吧。 3。 -Xss128k 这个参数, 建议你设置成256k, 不然容易造成不够用, 特别是你的程序有比较多的递归行为。 比如排序。 4。 另外如果想提高内存的性能, 你可以看看大内存设置.不是很好操作, 我没有测试过。 5。 在性能提升上, 我建议你使用Linux kernel 2.6.22+版本, JAVA6 是不是32位的不是很要紧。这个提升是非常大的。 32位上, 你对JAVA能配置的内存理解是错误的。 一般来说1。5G的配置, 都可能导致JVM进程出问题, 这个测试我做过, 一般高压力运行2-3天后, JVM会CRASH, 我不是很明白为什么, 有可能JAVA5在CMS的问题导致的。一般建议在32位下配置内存为1280m. |
|
返回顶楼 | |
发表时间:2008-12-24
机器配置:
两台至强; 2.4GHz,4G内存; 对并发、单位时间内比如1分钟内处理几万个请求是比较要求的; |
|
返回顶楼 | |
发表时间:2008-12-24
问 sdh5724 兄:
一个web 应用开发完成后,怎么测试 要用到什么软件或者工具吗 可不可以推荐几个。。。。 我现在的系统运行有点慢 但是就是找不到导致慢的原因所在 大家有什么好的方法呢? |
|
返回顶楼 | |
发表时间:2008-12-24
andy54321 写道 机器配置:
两台至强; 2.4GHz,4G内存; 对并发、单位时间内比如1分钟内处理几万个请求是比较要求的; 建议你看看, 是不是在高峰的时候把线程用完了。对于web服务器, 1000个THREAD干活很恐怖的, 实际上apache到了1000个连接都已经很恐怖了。 |
|
返回顶楼 | |
发表时间:2008-12-24
valibo 写道 问 sdh5724 兄:
一个web 应用开发完成后,怎么测试 要用到什么软件或者工具吗 可不可以推荐几个。。。。 我现在的系统运行有点慢 但是就是找不到导致慢的原因所在 大家有什么好的方法呢? 有一些监控的工具, 比如introscope等, 这个是用在生产环境的。 QA一般采用loadrunner, jmeter来测试压力情况, 我比较土, 一般我只是用kill -3来看栈的情况。另外, 我在业务层加上了性能拦截的AOP, 把性能执行的部分信息写到了日志里。 |
|
返回顶楼 | |
发表时间:2008-12-24
JAVA_OPTS="-server -Xms2048M -Xmx2048M -Xss128k -XX:+AggressiveOpts -XX:+UseParallelGC -XX:+UseBiasedLocking"
这个是不是有问题,虽然32位系统寻址空间4G,但是记得虚拟机最多1.4左右,不是越大越好,GC的时间也会很长,新区和老区,永久区要有一定比例,另外,原来看过一篇文章,说不用一定要加-server模式,加了未必性能一定有提高,你测试结果如何? |
|
返回顶楼 | |
发表时间:2008-12-24
-server纯粹是内纯行为, SERVER是不需要关心整个系统内存的. 因此, -server是必要的.
|
|
返回顶楼 | |