Java性能调优工具(Linux)
为了能准确获得程序的性能信息,需要使用各种辅助工具。以下主要介绍了Linux上关于Java的系统性能分析工具,掌握这些工具,对于性能瓶颈定位、系统故障排查都有帮助。
1、top命令
1 [root@localhost ~]# top 2 top - 10:00:05 up 4 days, 22:16, 1 user, load average: 0.00, 0.01, 0.05 3 Tasks: 211 total, 1 running, 210 sleeping, 0 stopped, 0 zombie 4 Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 5 Mem: 8064684k total, 3277888k used, 4786796k free, 202912k buffers 6 Swap: 8142844k total, 0k used, 8142844k free, 2503844k cached 7 8 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9 18730 root 20 0 15196 1220 840 R 0.3 0.0 0:00.06 top 10 1 root 20 0 19408 1576 1252 S 0.0 0.0 0:00.87 init 11 2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd 12 3 root 20 0 0 0 0 S 0.0 0.0 0:00.31 ksoftirqd/0 13 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 14 7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 migration/
【释义】
第一行:top - 10:00:05 up 4 days, 22:16, 1 user, load average: 0.00, 0.01, 0.05
任务队列信息:与uptime命令执行结果一样。
10:00:05 | up 4 days, 22:16 | 1 user | load average: 0.00, 0.01, 0.05 |
当前系统时间 | 系统运行时间,格式为时:分 | 当前登录用户数 |
系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
第二行:Tasks: 211 total, 1 running, 210 sleeping, 0 stopped, 0 zombie
进程统计信息:
211 total | 1 running | 210 sleeping | 0 stopped | 0 zombie |
进程总数 | 正在运行的进程数 | 睡眠的进程数 | 停止的进程数 |
僵尸进程数 |
第三行:Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
CPU统计信息:
0.0%us | 0.0%sy | 0.0%ni | 100.0%id | 0.0%wa | 0.0%hi | 0.0%si | 0.0%st |
用户空间CPU占用率 | 内核空间CPU占用率 | 用户进程空间内改变过优先级的进程CPU占用率 | 空闲CPU占用率 | 等待输入输出的CPU时间百分比 | 硬件中断请求 | 软件中断请求 | Steal Time |
第四、五行:Mem: 8064684k total, 3277888k used, 4786796k free, 202912k buffers
Swap: 8142844k total, 0k used, 8142844k free, 2503844k cached
内存信息:
Mem | 8064684k total | 3277888k used | 4786796k free | 202912k buffers |
物理内存总量 | 已使用的物理内存 | 空闲物理内存 | 内核缓存使用量 | |
Swap | 8142844k total | 0k used | 8142844k free | 2503844k cached |
交换区总量 | 使用的交换区总量 | 空闲交换区大小 | 缓存交换区大小 |
第六行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
进程信息:
PID | USER | PR | NI | VIRT | RES |
进程id |
进程所有者的用户id | 优先级 | nice值。负值表示高优先级,正值表示低优先级 | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR |
S | %CPU | %MEM | TIME+ | COMMAND |
共享内存大小,单位kb | 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
上次更新到现在的CPU时间占用百分比 | 进程使用的物理内存百分比 | 进程使用的CPU时间总计,单位1/100秒 | 命令名/命令行 |
还有其他的一些参数,这里没有列出,了解请查看《Java程序性能优化-让你的Java程序更快、更稳定》这本书的第300页。
另外,top命令还有一些比较使用的交互命令:
f | o | h | k | q | c | M | P | T | 数字1 |
可以进行列的选择 | 可以更改列的显示顺序 | 显示帮组信息 | 终止一个进程 | 退出程序 | 切换显示命令名称和完整命令行 | 根据驻留内存大小进行排序 | 根据CPU使用百分比大小进行排序 | 根据时间/累积时间进行排序 | 显示所有CPU负载情况 |
注意:使用top命令可以从宏观上观察系统各个进程对CPU的占用情况以及内存使用情况
2、sar命令
3、vmstat命令
4、iostat命令
5、pidstat命令