查看程序占用tomcat内存情况
近期,公司线上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
结果就能够看到哪段代码导致的问题...
查看程序占用tomcat内存情况的更多相关文章
- linux下查看程序占用多少内存
执行 ps auxVSZ(或VSS)列 表示,程序占用了多少虚拟内存:RSS列 表示, 程序占用了多少物理内存:虚拟内存可以不用考虑,它并不占用实际物理内存. 或执行top 命令 VIRT(或VSS) ...
- ubuntu查看系统资源占用(内存,cpu和进程)
ubuntu查看系统资源占用(内存,cpu和进程) 1 top 查看ubuntu的资源占用的命令为$: top 说明:top命令就可以查看内存,cpu和进程了,很方便 top: 主要参数 d: ...
- ubuntu查看系统资源占用(内存,cpu和进程)
http://blog.csdn.net/vivian187/article/details/51476043 http://bluexp29.blog.163.com/blog/static/338 ...
- c/C++编译的程序占用的内存分为以下几个部分
首先要搞清楚编译程序占用的内存的分区形式:一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等 ...
- 为什么Java程序占用的内存比实际分配给它的要多
很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的J ...
- 如何获知PHP程序占用多少内存(复制)
想要知道编写的 PHP 脚本需要占用多少内存么?很简单,直接使用 PHP 查看当前分配给 PHP 脚本的内存的函数 memory_get_usage() 就可以了 下面是使用示例: 复制代码 代码如下 ...
- iOS-UI篇—简单的浏览器查看程序和Tomcat简单实现
#import "ViewController.h" @interface ViewController () @property (retain, nonatomic) NSAr ...
- linux 查看cpu个数,内存情况,系统版本
查看cpu个数 总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看物理CPU个数 cat /proc/cpuinfo ...
- Java程序占用的内存可能会大于Xmx
很多人认为Xmx和-Xms参数指定的就是Java程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素. 除了堆,影响Java程序所占用内存的因 ...
随机推荐
- mongo 3.4分片集群系列之八:分片管理
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- Angular——作用域
基本介绍 应用App是无法嵌套的,但是controller是可以嵌套的,每个controller都会对应一个模型(model)也就是$scope对象,不同层级的controller下的$scope遍产 ...
- 远程图形界面:VncServer与KDE桌面远程连接
强烈不建议putty+xming的工作方式,太慢了,且界面也不是特别友好. 原文:vncserver与KDE远程连接 建议:不过还是建议使用Xshell,使用 ...
- HDU_1024_dp
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Java学习4_一些基础4_输入输出_16.5.7
读取输入: 想从控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联. Scanner in=new Scanner(System.in); String na ...
- SpringMVC接收多参数的处理方法
问题:依赖SpringMVC自带的机制解析多对象参数往往出现解析不了的问题,使用较为复杂. 解决思路:前端 JS 先把传递到后台的对象转换为 JSON 字符串,后台直接使用字符串类型接收,再使用 st ...
- 08Microsoft SQL Server 数据查询
Microsoft SQL Server 数据查询 单表查询所有列 --查询所有行所有列 select all * from table; --查询不重复行的所有列 select distinct * ...
- Android 各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- git 的 基础操作及使用
/* git svn版本控制器 */ /*git把文件对应的储存空间分为三个区: 1.工作区 2.缓存区 3.历史区 直接操作文件,不做add时,咱们是在工作区做的修改 右键 git bash her ...
- 11servlet接口
11.servlet接口-2018/07/23 1.servlet 是一个接口,需要导包javax.servlet.Servlet; 第一种编写一个servlet程序的方法 写一个Java类,实现se ...