成就无边界服务
www.shsnc.cn
1
LINUX 类主机 JAVA 应用程序占用 CPU、内存过高分析手段
作者:丁启良,新炬网络技术专家
做为一个 IT 运维人员,通常在运维过程中会遇到各种各样的问题,系统问题、应用问题、
程序问题,而在这当中必然会涉及到性能问题,当用户量过大,或者服务器性能不足以支持
大用户量,但同时又得不到扩容的情况下,进行性能分析,并对系统、应用、程序进行优化
则显得尤为重要,同时也是节省资源的一种必不可少的手段,目前大多数的运维产品都是基
于 JAVA 语言开发的,下面我给大家介绍一下在 linux 环境下对 JAVA 的性能分析手段。
1. 应用程序占用资源高问题
目前大部分应用程序采用的是 JAVA 语言开发,在产品上线使用一段时间后,经常会出现某
个 JAVA 程序占用的 CPU,内存过高,而且几乎从不释放,导致系统卡顿,用户使用变慢,
如果要恢复,则必须杀掉该进程或重启该服务,然后进行此操作时,必定会导致业务中断。
程序主要由代码组成,优化则需要知道是哪段代码占用资源,并且一个应用占用 CPU 很高,
除了确实是计算密集型应用之外,通常原因都是出现了死循环,所以通过优化代码来降低应
用程序的资源消耗或者在应用的使用过程中减少死循环则必不可少。
下面我们以 4A 平台的字符网关服务器为例来进行相应分析。
2. 问题分析
2.1. CPU 过高分析
1) 使用 TOP 命令查看 CPU、内存使用状态可以发现 CPU 占用主要分为两部分,一部分为系
统内核空间占用 CPU 百分比,一部分为用户空间占用 CPU 百分比。其中 CPU 状态中标示 id
的为空闲 CPU 百分比。当空闲 CPU 百分比越低,说明 CPU 占用率越高。
2) 初步分析可以发现其中主要占用 CPU 的进程为 java 子进程 jerrySsh 服务(用户访问资
源使用的监听服务),在用户量不大的情况下,CPU 消耗资源很大。根据研发反馈字符网关
设定的最大访问量可达到 500/台,目前字符网关的资源使用现状无法满足设定的要求。
分析手段
目前针对 Linux 下 java 进程占用 CPU 高的分析手段主要为使用 linux 命令查出高 CPU 使用
的进程,前分析其是由于进程原因还是系统原因,在分析出为进程消耗过高 CPU 后列出占用
CPU 高和占用时间最长的线程并使用 jdk 自带的 jstack 工具进行分析 CPU 使用分析
export JAVA_HOME=/usr/apps/java/jdk1.6.0_20/
export PATH=$JAVA_HOME/bin:$PATH