设为首页 收藏本站
查看: 641|回复: 0

[经验分享] Tomcat 调优过程

[复制链接]

尚未签到

发表于 2017-1-23 10:45:15 | 显示全部楼层 |阅读模式
  (一)Tomcat內存溢出的三種情況及解决辦法分析:http://rritw.com/a/fuwuqiruanjian/Tomcat/20110524/86244.html
  1.OutOfMemoryError: Java heap space
  2.OutOfMemoryError: PermGen space
  3.OutOfMemoryError: unable to create new native thread.
  (1)JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。
  解决方法:調整-Xms -Xmx参數可以解决。
  set JAVA_OPTS= -Xms1024m -Xmx1024m 
  (2)如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。這種錯誤常見在web服務器對JSP進行pre compile的時候。
  解决办法:這一個一般是加大-XX:PermSize? -XX:MaxPermSize 來解决問題。
  set JAVA_OPTS= -Xms1024m -Xmx1024m? -XX:PermSize=128M -XX:PermSize=256M
  (3)主要是和jvm與系統內存的比例有關。這種怪事是因为JVM已經被系統分配了大量的內存(比如1.5G),並且它至少要占用可用內存的一半。有人發現,在線程個數很多的情況下,你分配给JVM的內存越多,那麼,上述錯誤發生的可能性就越大。
  原因分析:
  每一個32位的進程最多可以使用2G的可用內存,因为另外2G被操作系統保留。這裏假設使用1.5G给JVM,那麼還餘下500M可用內存。這500M內存中的一部分必須用於系統dll的加載,那麼真正剩下的也許只有400M,現在關鍵的地方出現了:當你使用Java創建一個線程,在JVM的內存裏也會創建一個Thread對象,但是同時也會在操作系統裏創建一個真正的物理線程(参考JVM規範),操作系統會在餘下的400兆內存裏創建這個物理線程,而不是在JVM的1500M的內存堆裏創建。在jdk1.4裏頭,默認的棧大小是256KB,但是在jdk1.5裏頭,默認的棧大小为1M每線程,因此,在餘下400M的可用內存裏邊我們最多也只能創建400個可用線程。
  . 這样結論就出來了,要想創建更多的線程,你必須減少分配给JVM的最大內存。還有一種做法是讓JVM宿主在你的JNI代碼裏邊。
  给出一個有關能夠創建線程的最大個數的估算公式:
  . (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
  例:對於jdk1.5而言,假設操作系統保留120M內存:
  1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads
  1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads
  解决办法:最大线程与预留 OS 内存须保持强关系比。共 10G,jvm5G,最大线程 1024。
  (二)tomcat的maxThreads、acceptCount(最大线程数、最大排队数)
  maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
  acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
  (1)
  第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
  第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。
  (2)
  我在测试时遇到一个问题,maxThreads我设置的比较大比如3000,当服务的线程数大到一定程度时,一般是2000出头,单次请求的响应时间就会急剧的增加,cpu把大多数时间都用来在这2000多个线程直接切换上了,当然cpu就没有时间来处理我们的程序了。
  (3)acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。


(三)关于Nginx的一些优化(突破十万并发)http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8
  (四)Linux下高并发socket最大连接数所受的各种限制
  http://blog.csdn.net/guowake/article/details/6615728
  第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
  net.ipv4.ip_local_port_range = 1024 65000
  第二步,执行sysctl命令:
  [speng@as4 ~]$ sysctl -p
  (五)高并发应用中客户端等待、响应时间的推算,及RT/QPS概念辨析
  原文:http://www.cnblogs.com/chenjianjx/archive/2012/09/12/2681658.html
  RT:响应时间
  QPS:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332435-1-1.html 上篇帖子: Tomcat与Red5集成 下篇帖子: tomcat并发优化配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表