近期,公司线上tomcat常常无缘无辜宕机。总结了一下定位问题的方法,仅供參考:

报错信息:

Maximum number of threads (200) created for connector with address null and port 9443
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.

一、查看当前用户线程和文件句柄数是否超出限制

(1)显示当前用户进程限制:ulimit -a 

显示结果:

core file size          (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256612
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 102400
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

(2)改动全部 linux 用户的环境变量文件:

vi /etc/profile
ulimit -u 10000
ulimit -n 4096

保存后执行#source /etc/profile 使其生效

二、查看当前port号进程信息和GC使用情况

(1)显示port的PID:lsof -i:port

演示样例:lsof -i:7074

COMMAND  PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java 3195 ligang 34u IPv4 37416693 0t0 TCP *:7074 (LISTEN)

(2)gc信息统计:jstat -gcutil PID

演示样例:jstat -gcutil 3195

 S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
12.63 0.00 52.03 78.63 99.13 4148 24.274 200 40.246 64.520

(3)输出线程数:ps -mp PID -o THREAD,tid,time | wc -l

演示样例:ps -mp 3195 -o THREAD,tid,time | wc -l

43

三、查看进程内存使用情况及定位到相应程序

(1)内存使用情况:top -p PID

演示样例:top 3195

top - 15:29:27 up 25 days, 20:05,  2 users,  load average: 0.01, 0.05, 0.01
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8058868k total, 6821684k used, 1237184k free, 181936k buffers
Swap: 2097144k total, 492300k used, 1604844k free, 1897320k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3195 ligang 20 0 4862m 196m 10m S 0.0 2.5 7:57.48 java

(2)找到该进程后。怎样定位详细线程或代码呢,首先显示线程列表,并依照CPU占用高的线程排序:

ps -mp PID -o THREAD,tid,time | sort -rn | head -10

演示样例:ps -mp PID -o THREAD,tid,time | sort -rn | head -10

USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
ligang 0.6 - - - - - - 00:07:58
ligang 0.2 19 - futex_ - - 3270 00:02:49
ligang 0.0 19 - inet_c - - 3277 00:00:00
ligang 0.0 19 - inet_c - - 3273 00:00:00
ligang 0.0 19 - inet_c - - 3271 00:00:00
ligang 0.0 19 - inet_c - - 3203 00:00:05
ligang 0.0 19 - futex_ - - 7644 00:00:00
ligang 0.0 19 - futex_ - - 3420 00:00:00
ligang 0.0 19 - futex_ - - 3288 00:00:06

(3)将须要的线程ID转换为16进制格式:printf "%x\n" TID

演示样例:printf "%x\n" 3270

cc6

(4)最后打印线程的堆栈信息:jstack PID |grep cc6 -A 30

演示样例:

jstack 2633 |grep e18 -A 30

结果就能够看到哪段代码导致的问题...

最新文章

  1. 夺命雷公狗----Git---4---多人协作实现
  2. node.js小结 2
  3. 【unity shaders】:Unity中的Shader及其基本框架
  4. ubuntu 使用wine卸载软件
  5. python Request库
  6. Hadoop入门进阶课程5--MapReduce原理及操作
  7. BenchmarkSQL测试脚本实现
  8. Windows Live Writer安装失败错误解决方案
  9. magento前台访问错误
  10. Myeclipse 10/2014 配置插件(svn、maven、properties、velocity)方法
  11. 1.4 正则化 regularization
  12. swiper display:none 后 在显示 滑动问题
  13. k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建
  14. kubernets kubevirt 分析
  15. 小练习_num1
  16. Shell编程(二)Bash中调用Python
  17. 九、uboot 代码流程分析---relloc_code
  18. Linux之备份(tar)/解压与压缩(gzip,bzip2,xz)【待完善】
  19. CareerCup All in One 题目汇总
  20. 负载均衡+session共享(memcached-session-manager实现)

热门文章

  1. GDB 使用小结
  2. LR接口测试---Java Vuser之jdbc查询(调试前)
  3. 百度AI车牌识别测试
  4. Maven对不同的测试环境用不同的参数进行打包
  5. Probabilistic locking in SQLite
  6. IE/firefox/chrome 每次都刷新
  7. Shell script之How to write
  8. 个人觉得比较好用的chrome插件
  9. Jmeter在Windows上分布式压测遇到的坑
  10. 14mysql事务、数据库连接池、Tomcat