Stay Hungry Stay Foolish

操作系统系能监控简介

Posted on By Jun Xi Gu

本文是对操作系统系能监控的基本知识的汇总和个人理解


性能监控的关键在于知道该监控什么数据

操作系统性能数据的监控

操作系统自带一些长期收集系统性能数据的日志工具如:sar,kstat,cpustat等

CPU使用率

CPU使用率分为两种,一种是用户态,一种是系统态
用户态使用率是指应用使用CPU所占的比率,而系统态是进行系统调用时消耗CPU的比率
系统态CPU使用意味着共享资源的竞争,I/O设备之间的交互,所以要想提高性能应该尽量降低系统态CPU的使用
另外,对于计算密集型的应用还需要监控每时钟指令数,查看是否存在浪费CPU时钟周期的因素(如高速缓存未命中)等,但这需要特别的监控工具

工具

Windows:Task Manager,Performance Monitor,Windows typeperf
Linux:System Monitor,vmstat,mpstat,top,jstack
Solaris:System Monitor,cpubar,vmstat,mpstat,prstat,jstack

CPU调度程序运行队列

运行队列中是就绪的任务,它们在等待CPU的调度,如果准备运行的轻量级进程数超过系统能处理(硬件线程数)的上限,运行队列就会很长
改善的方法是:一、增加CPU数,二、改善算法和数据结构来减少线程对CPU使用

工具

Windows:Performance Monitor,typeperf
Solaris:cpubar,vmstat
Linux:vmstat

内存使用率

需要监控系统内存的相关属性:页面调度、页面交换、加锁、线程上下文切换等

工具

Windows:Performance Monitor,typeperf
Solaris:vmstat
Linux:vmstat

监控锁竞争

锁竞争导致线程的让步式上下文切换,耗费大量的时钟

工具

Windows:借助外部工具Performance Analyzer
Solaris:mpstat
Linux:pidstat

监控抢占式上下文切换

抢占式上下文切换表明线程数大于硬件线程数

工具

Windows:Task Manager等
Solaris:mpstat,prstat
Linux:pidstat

监控网路I/O使用率

当应用不能高效使用网路I/O就会导致数据进入操作系统的缓冲,导致延迟

可用用NIO库提高Java应用的网路I/O性能

工具

Windows:Task Manager等
Solaris:nicstat
Linux:nicstat

磁盘I/O使用率

工具

Windows:Performance Monitor
Solaris:iostat
Linux:iostat

参考文献

《Java性能优化权威指南》