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

[经验分享] 性能调优step by step (四) --遇到的问题(Apache)

[复制链接]

尚未签到

发表于 2017-1-13 07:29:19 | 显示全部楼层 |阅读模式
一.两个失误

1.Timeout 20   改错  改成0了,导致报500 异常
解决办法:这样客户端链接一直不超时,很快就会占满所有的资源。其它连接就连接不上。这个超时时间是必须有的
2.  配置的应该是AJP1.3的协议,原来配置项有些配置到8080端口了 配置的是http1.1协议。对应于AJP的8009参数没有配置上。导致不能满足高并发的要求.
二.其他调优点
3.  tps 上不去
分析:
(1)测试代码问题,把newSampleTest() 放在了setUp里面,统计结果不准
,导致TPS一直比较异常,要么是用户数整除的,要么是直线上升的。
(2)TPS开始会比较高,但随时间大幅下降,响应时间也是越来越长,并通过监控显示, 大量线程bolck在 取用户产品权限这里
QA的测试脚本中存在一个问题:往数据库插入的数据,每次请求都是同一个userid,只会循环改变vaccountid,这样导致按userid取列表的SQL性能每次请求一次比一次差。
(3)接口测试时都是短连接,不需要长链接。
httpd.conf   KeepAlive 为Off
  JkWorkerProperty worker.localnode.connection_pool_timeout=0 为链接池的等待时间,让其不超时,因为我们采用的是一个apache 对应一个jboss 一直保持通讯就可以了,JBOSS 同步修改。
结果:比原来理想,tps 有提高。


4.502 异常频繁出现
4.1 解决办法:将原来的 mod-jk  localnode方式修改为loadbalancer,使用apache 缓冲池,并设置了apache 线程池大小为500。
4.2 又爆出 502、503 异常:Apache configured -- resuming normal operations
将socket超时时间增加些,让请求的线程等待时间加长一点。不至于很快拒绝掉,导致503异常。
JkWorkerProperty worker.localnode.socket_timeout=20  增加
JkWorkerProperty worker.localnode.connection_pool_minsize=25 (增加,原来注释掉了)
4.3 502 Response has been sent to the client (yet)
解决方法:线程池被被占用,先修改log看下,再有问题修改下 mod-jk  soket超时时间。调的长一点。


5.将maxProcess 和maxThread 同时出现,以哪个为基准,cpu与性能有什么关系
分析: maxProcessor  和maxThread 同时出现时,maxProcess   优先级较高。maxProcess  表示最大并发数,maxThread 是jboss 启动的最大线程数。
这里最大链接数调整为3200 ,这个已经足够满足需求了,用于保证jboss 的稳定性,算法就是每个cpu 可以撑住200个线程,16core*200/core = 3200 ,生产环境为8core  cpu需要调整下。
     apache 起了10 个进程  StartServers = 10 这里有两个相关参数要调整
     MinSpareThreads(http_conf)*10 = MinSpareThreads (server.xml) ?
     JkWorkerProperty worker.localnode.connection_pool_size=320 *10 (启动了10个进程)= maxClient
     
ServerLimit      100
ThreadLimit      400(大于 ThreadsPerChild  320)
StartServers     10
MaxClients       3200
MinSpareThreads  100
MaxSpareThreads  320(小于MaxClients/10)
ThreadperChild   320


6.  报异常Socket read failed

[org.apache.catalina.core.StandardWrapperValve] ERROR org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/pc2].[remoting] :: Servlet.service() for servlet remoting threw exception
java.io.IOException: Socket read failed
at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:1014)
at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:1089)

解决方法:对比和UDB配置区别server.xml
maxThreads="3200"  minSpareThreads="100"(1000修改为100没有与httpd中相应值 10:1 这个说法) backlog="256"  

7.宕机,apache error_log报child process 14629 still did not exit, sending a SIGTERM 错误
解决办法:apache 子进程无法正常终止,资源耗尽就宕机了,apache的日志文件太大导致的,将apache 日志删除。
8.3200多个close_wait 状态, apache 很慢。最终跑完时有1800多个close_wait,gcUtil观察回收情况,发现回收不正常 YGC非常慢,不是每次更新一行都有增加回收次数
解决方法:由于测试环境是 16core的cpu ,这样我们的最大连接数可以按照 16*200= 3200 调,从结果来看,1800个最终的close_wait/UDB 在同样配置下是900左右的cose_wait挂起状态,也说明我们16核接收了更多请求,但是apache 配置确没有接受这么多,导致线程阻塞。调整为 3200个最大并发数。
调整后 wait 的线程保持 200 个左右回收正常了。刚才的回收不正常是由于线程挂起导致的。

运维网声明 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-327635-1-1.html 上篇帖子: Win2003环境下用Apache整合Tomcat6和IIS服务器共用80端口 下篇帖子: inux上的apache+tomcat+ssi,服务器集群,和ssi配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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