可以使用静态的ps或者动态的top,还能使用pstree查看程序树之间的关系
ps
1 仅观察自己bash 相关的程序 ps -l
例子:
F:程序的总结权限,常见的 4 表示此程序的权限是root,0表示此子程序只复制(fork)不执行(exec)
S 表示这个程序的状态。常见 的 R:(running),S:(sleep)正在睡眠状态(idle)但可以被唤醒(signal),D:不可被唤醒的睡眠状态,很多时候是在等待IO,T:(stop),Z:(zoombie) 僵尸程序,程序已经终止但无法被移除到内存外。
UID/PID/PPID 表示此程序被该UID所拥有/该程序的PID/改程序的父程序PID
C 代表CPU的使用率,单位是百分比
PRI/NI 该程序的priority,数值越小,优先级越高
ADDR/SZ/WCHAN 都是与内存有关,ADDR是kernel function ,指出改程序在内存的哪个部分,如果是running的程序,一般是【-】,SZ表示用了多少内存,WCHAN表示程序运行状态,如果是running同样是【-】
tty 登入者的位置,如果是远程登录则使用动态登入接口(pts/n)
TIME 程序使用掉的内存时间
CMD 触发该程序的指令
2 查看内存中所有的程序 ps aux
user:该process属于哪个使用者账号
PID:程序标识符
%CPU:该程序使用掉的CPU资源百分比
%MEM:该process所占用的物理内存百分比
VSZ:该process使用掉的虚拟内存量(Kbytes)
RSS: 该process占用的固定的内存量(Kbytes)
TTY:该process是在哪个终端机上面运行,若与终端机无关则显示?,另外tty1-tty6是本机上面的登入者程序,若为pts/0等,则表示为由网络连接进主机的程序
STAT:该程序的目前状态,状态显示与ps -l 的S相同
START:该process被触发启动的时间
TIME:该process实际使用CPU运作时间。
COMMAD:该process实际指令为何
3 如果要以ps -l的那种显示格式来显示系统所有的程序 则使用 ps -lA
4 利用 ps axjf 显示出类似程序树
5 如果要查看特定的程序信息,则配合利用管线。例如,查看服务是cron或者syslog相关的PID ps aux | egrep "(cron|syslog)"
6 僵尸程序:造成僵尸程序是因为该程序应该已经执行完毕,或者是因为应该要终止了, 但是该程序的父程序无法完整的将该程序结束掉,而造成那个程序一直存在内存当中。 如果你发现在某个程序的 CMD 后面还接上 <defunct> 时,就代表该程序是僵尸程序。当出现僵尸程序时候,你需要追踪他的父程序,然后好好优化,不要只是直接将他kill掉。事实上,通常僵尸程序都已经无法控管,而直接是交给init这只程序负责,偏偏init是系统第一支执行程序(你通过pstree可以看到),他是所有程序的父程序,我们不能杀掉这程序,否则系统就死了。所以,如果无法透过核心非经常性的特殊处理将程序删除,就只有reboot了
top:不同于ps静态的结果输出,top可以持续的检测整个系统的工作状态,在默认情况下,每次更新为5秒,不过可以使用-d进行修改
,top主要分为连个画面,上面是整个系统的资源使用状态,基本上六行。
第一行(top):主要包括,目前的时间,开机到目前为止所经过的时间,系统在1,5,15分钟的平均工作负责,代表的是1,5,15分钟,系统平均要负责运行几个程序(工作)的意思,越小表示系统越闲置,若高于1要注意系统程序是否太多繁复了
第二行(task)目前程序的总来那个与个别程序在什么状态
第三行(CPUs)CPU 的整体负载,每个项目可使用?查询,%wa表示表示的是IO wait ,通常我们系统会变慢是因为IO的问题,因此要注意这个项目好用CPU的资源
第四行:表示目前物理内存与虚拟内存(MEM /Swap)的使用情况,要注意swap的使用量要尽量的少,如果很大,表示系统的物理内存实在不足
第五行:这个是当在top程序中输入指令时候,显示状态的地方。
下面是各个process的信息,气体中TIME+ 表示CPU使用时间的累加
top预设使用CPU使用率(%CPU)作为排序,如果你想要使用内存使用率排序,则可以按下【M】,如要回复则按下【P 】要离开top按下【q】.
top常用的选项及按键如下:
如果我们想观察特定的程序的动态变化,例如只观察我们这个bash的,bash的PIS可以通过 $$变量获得。
7 fuser 借由档案(或者文件系统)找到正在使用该档案的程序
有时候我想知道我的程序到底在这次启动中开启了多少个档案,可以利用fuser观察,例如,如果你在卸除时候发现通知 【device is busy 】那么这个文件系统、设备等正在盲忙碌中,表示有某只程序有利用到该文件系统、设备,那么就可以利用fuser追踪。
如果你想要查阅某个文件系统下有多少个程序正在占用该文件系统那么-m就很有帮助了。不仅可以针对整个文件系统也可以针对某个设备,档案
fuser -muv /proc
fuser -muv /dev/sdb
fuser -uv /var/gdm/,dgmfifo等等
8 lsof :
知道利用fuser可以由档案区找出使用该档案的程序,那么怎么查某个程序使用或者开启了哪些档案或者装置呢,那就是lsof
直接使用lsof列出系统所有开启的档案,装置
如果想仅列出与root的所有程序开启的socket文件呢? lsof -u root -a -U 要注意lsof -u root -U 与他是不一样的哦
列出目前系统上所有被启动的周边装置 lsof +d /dev (因为装置都在/dev中,所有使用目录就可以)
列出属于root的bash这只程序所开启的档案 lsof -u root | grep bash
9 pidof: 找出某只正在执行的程序的PID
用法: pidof [-sx] program_name
-s 仅列出一个PID而不列出所有的PID
-x 同时列出该program可能的PPID的那个程序的PID
例如,列出目前系统上init及syslogd这两个程序的PID pidof init syslogd