123sw 发表于 2018-12-6 12:54:04

tomcat7+java压测过程中占用CPU过高排查故障和解决办法

  环架构境:
  前端haproxy做为反向代理,后端N+1台tomcat+java服务
  

  出现问题:
  环境是新搭建的,本周在做压测刚开始的时候正常,随着量的上涨,导致CPU一直暴涨。
  

  解决办法和思路:

  
  1.)先通过top命令查看占用cpu高的PID
  # 根据top命令查看发现PID为2195和975的的进程占用CPU高达%200+,明显出现故障
http://s5.运维网.com/wyfs02/M00/84/5A/wKiom1eN7X2xg8jPAADUmZy5BSc283.jpg-wh_500x0-wm_3-wmp_4-s_2116617270.jpg
  

  2.)通过top -H -p pid命令查看,发现2275 3302 3375这几个进程占用CPU时间8分钟
http://s3.运维网.com/wyfs02/M00/84/5A/wKioL1eN7gOwF8w4AAEyVJbRqTQ637.jpg-wh_500x0-wm_3-wmp_4-s_3234734211.jpg
  3.)把线程pid转换为16进制,例如:上面的pid进程为3375转换过来为d2f
  命令:printf "%x\n" 3375
  4.)使用jstack命令,输出java的堆栈信息,为了方便也可输出至文本便于查看。
  命令:jstack 2195 |grep d2f -A 30
http://s3.运维网.com/wyfs02/M02/84/5B/wKiom1eN8R6COSc_AAJk4M-yZkE497.jpg-wh_500x0-wm_3-wmp_4-s_1810559371.jpg
  

  5.)将输出的信息发给开发人员进行确认,这样就能找出有问题的代码。



页: [1]
查看完整版本: tomcat7+java压测过程中占用CPU过高排查故障和解决办法