ps, top, htop, vmstat, dstat,pstree,pidof, pgrep
在htop默认没有添加字段的情况下。
ps | top | htop | |
常驻内存 | rss, rsz, rssize | ||
线性内存 | vsz, vsize | VIRT | VIRT |
进程占用CPU | %cpu | %CPU | CPU% |
进程状态 | state, S | S | S |
物理内存使用 | %mem,RES | MEM%, RES | |
共享内享 | SHR | SHR | |
进程已使用CPU时长 | time, cputime | TIME+ | TIME+ |
进程优先级 | PR | PR | |
nice值 | NI | NI |
ps :
详细信息请看这里:http://www-01.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds4/ps.htm?lang=zh
通过/proc/PID/(内核中进程状态信息)统计的各种信息;
report a snapshot of the current processes.
ps [options]:
选项有三种风格:
1 UNIX options, which may be grouped and must be preceded by a dash. 带-
2 BSD options, which may be grouped and must not be used with a dash. 不带-
3 GNU long options, which are preceded by two dashes. 长格式--
启动进程的方式:
系统启动过程中自动启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程;
第一种风格:
选项:
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
常用组合之一:aux
[root@localhost yum.repos.d]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 58848 6800 ? Ss 11:04 0:04 /usr/lib/systemd/systemd --switched-root root 2 0.0 0.0 0 0 ? S 11:04 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:04 0:04 [ksoftirqd/0] ..... root 1184 0.0 0.2 84584 2252 ? Ss 11:05 0:00 login -- root root 4066 0.0 0.3 82488 3588 ? Ss 21:07 0:00 /usr/sbin/sshd -D
带中括号的都是内核级进程,不带的是用户空间程序。
PID: 进程ID。
%CPU: 所占CPU。
%MEM: 所占内存。
VSZ:Virtual Memory Size 虚拟内存集,又称线性内存空间,相当于是top中的VIRT。 单位kb。
RSS:Resident Size,常驻内存集;不能被交换到swap中的数据所占大小。
STAT:
R:running,运行状态。
S:interruptable sleeping,可中断睡眠,等待某些条件为真。
D:uninterruptable sleeping,不可中断睡眠
T:Stopped,暂停状态,用户可唤醒。如ctrl+z的进程。
Z:zombie,程序执行完毕已终止,而父进程还没有来得及回收的这段时间。
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 会话主进程
START: 进程启动时的时间
TIME:进程占用CPU的时间,也就是已运行时间。
第二种风格:
-e:显示所有进程
-f:显示完整格式的进程信息
常用组合之二:-ef
[root@localhost yum.repos.d]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:04 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deser root 2 0 0 11:04 ? 00:00:00 [kthreadd] root 11705 4234 98 22:05 pts/1 00:00:48 dd if=/dev/zero of=/dev/null
PPID: 父进程ID.
C: cpu utilization CPU使用率
STIME: 进程启动时的时间
TTY: 终端
TIME: 进程运行时长,占用CPU时长。
常用组合之三:-eFH
-F:显示额外信息;
-H:以层级结构显示进程的相关信息;
[root@localhost grub2]# ps -eFH | grep -E '(sshd|PPID)' UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1149 1 0 20622 3612 0 17:39 ? 00:00:00 /usr/sbin/sshd -D root 13397 1149 0 33837 4936 1 20:11 ? 00:00:00 sshd: root@pts/7 root 13398 1149 0 33837 4928 0 20:11 ? 00:00:02 sshd: root@pts/5 root 13917 13410 0 28160 972 1 23:14 pts/5 00:00:00 grep --color=auto -E (sshd|PPID) root 13399 1149 0 33803 4936 1 20:11 ? 00:00:00 sshd: root@pts/4 root 13403 1149 0 33837 4932 1 20:11 ? 00:00:01 sshd: root@pts/6
SZ: 进程的核心映像大小
RSS: 常驻内存。
PSR:运行于哪颗CPU之上
常用组合之四:-eo, axo
-o:自定义显示的字段,以逗号分隔
字段的名称可以在man ps的STANDARD FORMAT SPECIFIERS段中找到。
常用的field:pid, ni, priority, psr, pcpu, stat, comm, tty, ppid, rtprio
ni:nice值;
priority:priority, 优先级;
rtprio:real time priority,实时优先级;
pcpu表示%cpu。pmem表示%mem
[root@localhost grub2]# ps axo pid,ppid,%cpu,%mem,stat,priority,rtprio,ni,psr,command | grep -E "(sshd|PID.*PPID)" PID PPID %CPU %MEM STAT PRI RTPRIO NI PSR COMMAND 1149 1 0.0 0.3 Ss 20 - 0 0 /usr/sbin/sshd -D 13397 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/7 13398 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/5 13399 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/4 13403 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/6 13921 13410 0.0 0.0 S+ 20 - 0 1 grep --color=auto -E (sshd|PID.*PPID)
cpu百分比: %cpu,pcpu,C
内存百分比:%mem,pmem
nice值:ni,nice
常驻内存:rss,rsz,rssize
用户ID:uid,euid
用户:uname,user,euser.
虚拟内存/线性内存:vsz,vsize
进程占用CPU时间:time,cputime
进程状态:state,S
top:
- display Linux processes
第一行:当前时间,系统已运行时间, 登录用户, 最近1分钟,5分钟,15分钟的负载(等待CPU的进程队列)。
第二行:进程总数,正在运行的,睡眠的,暂停的,僵死的。
第三行:用户空间cpu占用,系统空间CPU占用,nice调整过的,空闲百分比,等待I/O的,硬中断,软中断,被偷有的(虚拟化占用的)
第四行:总内存,空闲的,使用的,buff/cache占用的。
第五行:总swap,空闲的swap,使用的swap。可分配物理内存
PR: 优先级
NI: NICE值
VIRT: 线性地址空间
RES:物理内存使用
SHR: 共享内存使用(共享库类占用)
S: 状态
排序:
P:以占据CPU百分比排序;
M:以占据内存百分比排序;
T:累积占用CPU时间排序;
首部信息:
uptime信息:l命令
tasks及cpu信息:t命令
内存信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定的进程:k
选项:
-d #:指定刷新时间间隔,默认为3秒;
-b:以批次方式显示;
-n #:显示多少批次;
uptime:
显示系统时间、运行时长及平均负载;过去1分钟、5分钟和15分钟的平均负载;等待运行的进程队列的长度;
htop:
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
u 选择指定用户的进程
# 可以直接按数字来指定到进程。
进程部分默认不显示kernel进程,所以与top的不一样。其它字段意义一样。
F2可以调整各显示。F3搜索,F4过滤。
PRI: 优先级
VIRT: 占用的虚拟内存(线性内存)
RES: 物理内存占用
SHR: 共享内存占用
S: 状态
vmstat
-s 内存统计信息
r 运行或等待CPU时间片的进程个数
b 被阻塞(通常为等待IO完成)的进程队列的长度
swpd 从物理内存交换至swap中的数据量,是已占用的空间。 而不是速率。
free 空闲的物理内存
buffer buffer大小,通常与缓存写操作有关
cache cache大小, 通常缓存的都是page页面文件 与缓存读操作有关。
si : swap in 数据进入swap中的数据量, 通常是速率,kb/s
so : swap out 数据离开swap的数据量。
bi : block in 从块设备读入内存的数据量,速率kb/s
bo : block out 保存至块设备的数据量, 速率kb/s
in : interrupts 中断, 每秒中断数
cs : context switch, 上下文切换,也就是进程切换, 每秒切换次数。
上下文切换 几百上千还是正常的。 上万就表示CPU弱,任务多。
软中断一般是指系统调用,从用户空间切换到内核空间。 不是指上下文切换。
任何从用户模式转到内核模式的都是通过软中断的方式进行的。
任何硬件级别的一些事件的通知是通过硬中断进行的。
在网络服务器上,中断是比较高的。
任何一个网络数据报到达主机时,都会发生一个硬中断。
任何一个磁盘I/O发生时,也会发生硬中断。
us: 用户空间占用
sy: 内核空间占用
id: 空闲
wa: 等待I/O的进程占用
st: 被偷有的(虚拟化占用)
dstat:
- versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total,包含的CPU
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal 包含的磁盘
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
--tcp
--udp
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程;
pstree
pstree - display a tree of processes
[root@localhost test]# pstree systemd─┬─NetworkManager─┬─2*[dhclient] │ └─3*[{NetworkManager}] ├─abrt-watch-log ├─abrtd ├─agetty ├─alsactl ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─chronyd ├─dbus-daemon───{dbus-daemon} ├─irqbalance ├─lsmd ├─lvmetad ├─master─┬─bounce │ ├─pickup │ ├─qmgr │ └─smtp ├─polkitd───5*[{polkitd}] ├─rsyslogd───2*[{rsyslogd}] ├─smartd ├─sshd─┬─sshd───bash───pstree │ ├─sshd───bash───man───less │ └─sshd───bash ├─systemd-journal ├─systemd-logind ├─systemd-udevd └─tuned───4*[{tuned}] [root@localhost test]#
pidof
pidof -- find the process ID of a running program.
[root@localhost test]# pidof crond sshd 1179 3211 3125 2937 1168 [root@localhost test]# pidof -s crond sshd 1179 3211 [root@localhost test]#
pgrep,pkill
look up or signal processes based on name and other attributes
可以通符查找进程。下边的less是因为在一个ssh终端中执行man。
[root@localhost test]# pgrep ssh* -a 1168 /usr/sbin/sshd -D 2937 sshd: root@pts/1 3125 sshd: root@pts/0 3211 sshd: root@pts/2 3810 less -s [root@localhost test]# [root@localhost test]# pkill sshd
pgrep [options] pattern
-u uid:effective user
-U uid:read user
-t TERMINAL:与指定的终端相关的进程;
-l:显示进程名;
-a:显示完整格式的进程名;
-P pid:显示此进程的子进程;
我是来打酱油的,有问题还请指出。谢谢了。