1. 现象 最近发现线上机器 java 8 进程的 VIRT 虚拟内存使用达到了 50G+,如下图所示: 2. 不管用的 -Xmx 首先第一想到的当然使用 java 的 -Xmx 去限制堆的使用.但是无论怎样设置,都没有什么效果.没办法,只好开始苦逼的研究. 3. 什么是 VIRT 现代操作系统里面分配虚拟地址空间操作不同于分配物理内存.在64位操作系统上,可用的最大虚拟地址空间有16EB,即大概180亿GB.那么在一台只有16G的物理内存的机器上,我也能要求获得4TB的地址空间以备将来使用.例…
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况. 2,程序代码有问题,出现死循环,可能性极大. 问题解决: 1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出. 2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,…
最近收到邮件报警,说内存使作率达到84%.如下图: 解决方法: A:可能是代码原因导致的问题: 1.使用命令:top 查看当前进程的状态 2.从上图可以看到PID:916的java进程占用内存较大.定位线程问题(通过命令查看PID 为25894 进程的线程情况),命令:# ps p 916 -L -o pcpu,pmem,pid,tid,time,tname,cmd 由此可以看到这PID:916的进程产生了很多线程.接下来就可以通过jstack查看内存使用的堆栈. 3.查看内存使用的堆栈:在这里…
1.通过top 查看具体是哪个进程占用内存较多 Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.0 us, 1.0 sy, 0.0 ni, 96.3 id, 0.3 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 1016168 total, 63544 free, 824060 used, 128564 buff/cache KiB Swap: 2047996 total,…
1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu.   2.查找线程 使用top -H -p <pid>查看线程占用情况   3.查找java的堆栈信息 将线程id转换成十六进制 #printf %x 15664 #3d30   然后再使用jstack查询线程的堆栈信息 语法:jstack <pid> | grep -a 线程id(十六进制)   jstack <pid> | grep -a 3d30   这样就…
那天中午吃饭,一个同事说,那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了. 简直想笑. 背景说明 我们当前这个系统和很多的第三方系统做了集成,出问题的就是其中一个三方系统.其实很简单,他们的系统会产生一些个人待办任务,然后待办任务的个数需要推送到我们的 APP 上,作为图标的角标显示. 用户数据已经打通,其实很简单的需求,角标通知也不要求实时,10分钟刷一次就可以.这个场景非常典型,用消息队列再合适不过了.他们把…
转自:http://blog.51cto.com/chengxiaobai/2052530?cid=695076 故障:最近收到生产服务器的报警短信以及邮件,报警内容为:内存使用率高于70%. 使用top命令查看系统资源的使用情况,命令:top 如图可以看到java的进程内存使用率较高,java进程的内存使用率达到了70%+ 2.定位线程问题(通过命令查看9718进程的线程情况),命令:ps p 9718 -L -o pcpu,pmem,pid,tid,time,tname,cmd 由此可以看到…
#!/bin/bash #输入占用CPU较高的进程号 pid=$ if [ -z $pid ] then echo "PID is NULL" exit fi #找到该进程中占用较高的前30个线程号 >mytmp.out #获取线程信息 while read line do tid=`echo $line | awk '{print $8}'` echo $tid if [ "${tid}" = "-" ] then echo "…
在一次生产环境中,服务器负载报警,SSH登录上看到CPU占用很高. 1.执行top命令,看到进程号为9737的进程持续占用CPU 2.怀疑是否是进程配置的内存不够了,引发了fullGC导致CPU占用高,执行jmap -heap 9737,看到老年代使用率百分之零,不可能引发fullGC 3.所以应该是程序中的某个线程占用CPU高导致的,使用jstack 9737 > ps.txt导出进程的线程信息,执行top  shift+h找到占用cpu最高的线程,果然就是9737进程下的线程! 4.将线程号…
1. top 看看哪个进程是罪魁祸首 2.将这个进程的jstack dump 到一个文件里面,以备使用. jstack -l 25886 > /tmp/jstack.log # 如果报错,则加 -F 命令强制执行. jstack -F 25886 > /tmp/jstack.log 使用 sftp 弄到本地. 3.查看这个进程里面哪些子进程, 按 P 键排序占用 CPU 的子进程 top -H -p 25886 (top得到的进程号) # 这里得到的子进程id 为 26017,把该值转化为十六…