知识库

标准化实施手册及常见错误


东方通应用java进程cpu、内存异常

<h1>一、问题描述:</h1> <p>现象一. 中间件启动时卡住了起不来、启动慢。 现象二:中间件部署应用时卡在70%不动了。 现象三:中间件访问量大时,CPU也不高,JVM内存也够,但就是慢。 现象四:执行停止无效,停不下来中间件。 现象五:执行top,有java进程占用cpu、内存过高。</p> <h1>二、问题原因:</h1> <p>多数是由于中间件中的应用线程阻塞导致的,有定时任务在跑的建议单独部署定时任务,跟业务系统分离开来,以免影响业务系统使用。</p> <h1>三、排查思路</h1> <ul> <li>top查看占用cpu、内存过高的java进程,记录下pid</li> <li>top -Hp pid 记录该进程下具体哪几个线程占用cpu、内存异常(截图,必须是系统异常或者慢的情况下)。</li> <li>打印线程栈:jstack -l pid &gt;线程栈文件名.log(文件名自行定义) 每隔2秒执行一次、执行三次,三次的文件名需区分开,需在内存、cpu异常时执行,线程栈文件在当前目录下生成</li> <li>打印堆栈:jmap -dump:format=b,file=heap.bin pid 需在系统异常、访问速度慢时执行,或者进程占用cpu、内存异常,堆栈文件在当前目录下生成</li> <li>记录堆栈信息:jmap -heap pid(结果截图)</li> <li>输出gc日志:(文中的pid指java进程的pid) 执行jstat -gcutil pid 2000 20(每2秒执行一次,执行20次,结果截图) 执行jstat -gc pid 2000 20(每2秒执行一次,执行20次,结果截图) <pre><code class="language-java">JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -Xloggc:../logs/gc.log 日志文件的输出路径</code></pre></li> <li>最后将截图和线程栈文件、堆栈文件统一下载发给开发分析。</li> </ul>

页面列表

ITEM_HTML