目录
一、进程实时监控pidstat工具
1、pidstat 概述
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
2、pidstat 安装
pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。
- 在Debian/Ubuntu系统中可以使用下面的命令来安装:
apt-get install sysstat - CentOS/Fedora/RHEL版本的linux中则使用下面的命令:
yum install sysstat
3、实例讲解
3.1 默认参数
执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:
pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见2个CPU核心的运算资源的占用情况。
3.2 指定采样周期和采样次数
pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”,以下pidstat输出以2秒为采样周期,输出10次cpu使用统计信息:
pidstat 2 10
3.3 cpu使用情况统计(-u)
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
3.4 内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计:
以上各列输出的含义如下:
minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
VSZ: 该进程使用的虚拟内存(以kB为单位)
RSS: 该进程使用的物理内存(以kB为单位)
%MEM: 该进程使用内存的百分比
Command: 拉起进程对应的命令
3.5 IO情况统计(-d)
使用-d选项,我们可以查看进程IO的统计信息:
输出信息含义:
kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)
kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)
Command: 拉起进程对应的命令
3.6 针对特定进程统计(-p)
使用-p选项,我们可以查看特定进程的系统资源使用情况
3.7 pidstat常用命令
使用pidstat进行问题定位时,以下命令常被用到:
pidstat -u 1
pidstat -r 1
pidstat -d 1
以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。
二、Linux 系统管理命令(资源监控)
1、进程资源监测命令
1.1 ps 指令
(英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。Linux系统中ps命令支持3种不同类型的命令行参数,:
- Unix风格,前面加单破折线
- BSD风格,前面不加破折线
- GNU风格的长参数,前面加双破折线
- 参数说明
命令参数:
a 显示所有进程
-a 显示同一终端下的所有程序
-A 显示所有进程
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
e 显示环境变量
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示
2. pstree
命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁。
pstree -p work | grep ad
work为工作用户,-p为显示进程识别码,Chrome共启动了以下进程信息:
ps –Lf
3. linux上进程有5种状态:
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
- 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
- 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps工具标识进程的5种状态码:
- D 不可中断 uninterruptible sleep (usually IO)
- R 运行 runnable (on run queue)
- S 中断 sleeping
- T 停止 traced or stopped
- Z 僵死 a defunct (”zombie”) process
4). 常用命令组合
ps –A 显示所有进程信息
ps –ef 显示所有进程信息,连同命令行
1.2 top 指令
ps命令虽然在收集运行在系统的上的进程信息非常有用,但也有不足之处:他只能收集特定时间点的信息,但是对于那么频繁变更状态的进程信息查看就不是很方便了。而top命令刚好适应于这种情况。
以下为对top命令输出信息的描述:
1)第一行,任务队列信息,同 uptime 命令的执行结果
系统时间:14:22:59
运行时间:up 23 min,
当前登录用户: 2 user
负载均衡(uptime) load average: 0.00, 0.04, 0.11
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
2)Tasks — 任务(进程)
总进程:223 total, 运行:1 running, 休眠:222 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie
3)CPU状态信息
0.0%us【user space】— 用户空间占用CPU的百分比。
12.5%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
87.5%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比
- 内存状态
1863104 total, 901972 used, 132236 free, 828896 buffers【缓存的内存量】
5)swap交换分区
2097148 total, 0 used, 2097148 free, 751260 avail【缓冲的交换区总量】
6)各个进程的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
- 使用说明
使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p: 通过指定监控进程ID来仅仅监控某个进程的状态。
q: 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使top不显示任何闲置或者僵死进程。
c: 显示整个命令行而不只是显示命令名。
常用:top –p pid
top