文章目录
- CPU
- GNOME System Monitor
- vmstat
- mpstat
- top
- jstack
- vmstat
- 内存
- 监控锁竞争
- 网络 I/O 使用率
- 磁盘I/O使用率
linux的一些监控命令
CPU
GNOME System Monitor
Linux上可以使用图形化工具 GNOME System Monitor( GNOME系统监视器,用 gnomesystem- monl tor命令启动)监控CPU使用率(在 Resources I页上部显示),如下图,显示该系统有2个虚拟处理器。虚拟处理器的数目与 Java API Runtime. availableProcessors)相匹配:一个4核CPU(关闭超线程)在 GNOME系统监视器中显示为4个CPU,JavaAPI Runtime, avai lableprocessors()报告为4个虚拟处理器。GNOME Svstem Monitore的 CPU Historyl区域,显示的是每个虚拟处理器在一段时期内的CPU使用率,毎条线代表一个虚拟处理器。 CPU History下方(指颜色块)显示的是系统发现的每个
虚拟处理器的当前CPU使用率
vmstat
us是用户态CPU使用率
sy是系统台CPU使用率
id是空闲率或CPU可用率
mpstat
先执行一下命令安装sysstat:
yum install sysstat
然后执行 mpstat
usr 执行用户代码所用CPU时间的百分比
sys 执行内核代码所用CPU时间的百分比
iowait I/O等待时间的百分比
idle CPU空闲时间的百分比
top
使用top命令:
jstack
使用jstack生成栈追踪信息信息,
vmstat
内存
可以使用vmstat中的free列
如上图,si和so分别表示内存页面换入和换出的量,free是空闲的内存。
监控锁竞争
pidstat -w -I -p 26139 5
其中,cswch是每秒钟的上下文切换,如果是一个3GHz的CPU每秒钟时钟周期数为3000000000,如果这边的cswch上下文切换为3500,那么每个虚拟处理器上下文切换为3500/2=1750,耗费的时钟周期为1750*80000 = 140000000.然后这个占整个cpu的140000000/3000000000 = 4.7%,让步时钟周期张勇3%~5%,说明Java应用正面临锁竞争。
网络 I/O 使用率
wget https://downloads.sourceforge.net/project/nicstat/nicstat-1.95.tar.gz
tar -zxvf nicstat-1.95.tar.gz
cd nicstat-1.95
cp Makefile.Linux Makefile
vi Makefile 后修改 CFLAGS = $(COPT)
其中:
- Int:网络接口设备名
- rKb/s:每秒读取的KB数
- wKb/s:每秒写入的KB数
- rPk/s:每秒读取的包数
- wPk/s:每秒写入的包数
- rAv/s:每次读取的平均字节
- wAvs:每次写入的平均字节数
- %Util:网络接口使用率
- Sat:饱和度
应用性能改进的考虑
单次读写数据量小而网络读写量大的应用会消耗大量的系统态CPU,产生大量的系统调用。对于这类应用,减少系统态CPU的策略是减少网络读写的系统调用。此外,使用非阻塞的 Java NIO而不是阻塞的java.net. Socket,减少处理请求和发送响应的线程数,也可以改善应用性能。
从非阻塞 socket中读取数据的策略是,应用在每次读请求时尽可能多地读取数据。同样,当往 socket中写数据时,每个写调用应该尽可能多地写。一些 Java NIO/框架包含了这些事件,例如Grizzly-项日(htps: grizzly.dev. java.net) Java NIO1框架也有助于简化客户端一服务器类型应用的开发。JDK提供的 Java NIO只是一种原始实现,很容易导致 Java APIE的误用而使应用性能变差,建议使用 Java NIO框架。
磁盘I/O使用率
使用iostat来监控磁盘使用率
在 Linux上安装可选包 sysstat才能使用iostat
iostat -xc 5
其中:
- util:使用率
- system:CPU使用率