10-进程信息
ps 进程查看
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。
-A :所有的进程均显示出来,与 -e 具有同样的效用 -a : 显示现行终端机下的所有进程,包括其他用户的进程 -u :以用户为主的进程状态 -x :通常与 a 这个参数一起使用,可列出较完整信息
列出目前所有的正在内存当中的程序
$ ps aux|less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 43296 3604 ? Ss 2017 78:36 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 2017 0:03 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2017 0:45 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2017 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2017 3:25 [migration/0]
root 8 0.0 0.0 0 0 ? S 2017 0:00 [rcu_bh]...省略部分信息
USER:该进程属于那个使用者账号。 PID :该进程的进程ID号。 %CPU:该进程使用掉的 CPU 资源百分比; %MEM:该进程所占用的物理内存百分比; VSZ :该进程使用掉的虚拟内存量 (Kbytes) RSS :该进程占用的固定的内存量 (Kbytes) TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 STAT:该程序目前的状态,主要的状态有: R :该程序目前正在运作,或者是可被运作; S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。 T :该程序目前正在侦测或者是停止了; Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (僵尸) 程序的状态 START:该进程被触发启动的时间; TIME :该进程实际使用 CPU 运作的时间。 COMMAND:该程序的实际指令。
# 第19行
# ps -A | grep -w 19
19 ? 00:00:00 cpuhp/0
# 翻页显示
# ps -aux | less
搜索
# ps -aux | grep vim
root 248753 0.1 0.2 26648 10624 pts/1 S+ 23:00 0:00 vim 4.log
root 248876 0.0 0.0 12168 2560 pts/0 S+ 23:00 0:00 grep --color=auto vim
# 过滤包含grep字符的 结果
# ps -aux | grep vim |grep -v grep
root 248753 0.0 0.2 26648 10624 pts/1 S+ 23:00 0:00 vim 4.logtop 实时监控进程
top -c
# -c 列出详细进程信息 按shift+p 按CPU使用排序 ; 按shift+m 按MEM使用排序# top -c
top - 23:34:55 up 11 days, 23:13, 1 user, load average: 0.41, 0.41, 0.45
Tasks: 209 total, 2 running, 207 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.4 us, 2.2 sy, 0.0 ni, 90.4 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 3301092 total, 138348 free, 1480420 used, 1682324 buff/cache
KiB Swap: 3538940 total, 2949104 free, 589836 used. 1530280 avail Mem第一行(top...):这一行显示的信息分别为: 目前的时间,亦即是 23:34:55 那个项目; 开机到目前为止所经过的时间,亦即是 up 11 days, 23:13 那个项目; 已经登入系统的用户人数,亦即是 1 user项目; 系统在 1, 5, 15 分钟的平均工作负载。 代表的是 1, 5, 15 分钟,系统平均要负责运作几个程序(工作)的意思。 越小代表系统越闲置,若高于 1 得要注意系统存在资源使用瓶颈
第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。
比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧?
第三行(Cpus...):显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要特别注意的是 %wa ,那个项目代表的是I/O wait,通常你的系统会变慢都是I/O产生的问题比较大!因此这里得要注意这个
项目耗用 CPU的资源哦!~ 99.9%id 空闲CPU百分比,此值过低说明CPU消耗很大。 另外,如果是多核心的设备,可以按下数字键『1』来切换成不同 CPU 的负载率。
第四行与第五行:表示目前的物理内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap 的使用量要尽量的少!如果 swap 被用的很大量,表示系统的物理内存实在不足!
第六行:这个是当在 top 程序当中输入指令时,显示状态的地方。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
-------------------------------------------
至于 top 下半部分的画面,则是每个 process 使用的资源情况。比较需要注意的是:
? PID :每个 process 的 ID 啦!
? USER:该 process 所属的使用者;
? PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
? NI :Nice 的简写,不 Priority 有关,也是越小越早被执行;
? %CPU:CPU 的使用率;
? %MEM:内存的使用率;
? TIME+:CPU 使用时间的累加;top 预设使用 CPU 使用率 (%CPU) 作为排序的重点,
使用内存使用率排序,则可以按下『M』, 若要恢复CPU排序则按下『P』即可。如果想要离开 top 则按下『 q 』
生产案例 解决CPU100%
linux ssh进程占用100%CPU的解决方法:
1、top -c查看CPU占用100%,通过按大P看到排第一的是
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19618 root 20 0 59748 3428 2684 R 98.5 0.2 1057:22 ssh2、记录下上面这个进程的PID号19618,通过ps命令找出具体的详情:
# ps aux|grep 19618
root 19618 99.3 0.1 59748 3428 pts/2 R Jul29 1059:44 ssh 172.16.10.1 date
root 21954 0.0 0.0 105476 920 pts/0 S+ 10:13 0:00 grep 196183、找到具体的ssh父进程下面的具体子进程命令是ssh 172.16.10.1 date ,不重要kill掉即可
kill -9 196184、再top查看任务管理器CPU占用恢复正常
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.3%idlsof
lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息
通过lsof查看被delete删除的文件
lsof|grep delete列出某个进程打开的所有文件
lsof -p 进程pid号列出某个用户打开的文件
lsof -u boge列出某个文件被哪些进程打开
lsof /dir/filename列出访问某个目录的所有进程(使用 +D递归子目录)
lsof +d /dir1/dir2列出某个命令使用的文件信息(支持模糊匹配)
lsof -c ssh列出所有的网络连接信息
lsof -i # 只看TCP: lsof -i TCP查看某个端口的网络连接情况
# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1112 root 3u IPv4 27161 0t0 TCP *:ssh (LISTEN) sshd 1112 root 4u IPv6 27163 0t0 TCP *:ssh (LISTEN) sshd 8272 root 3u IPv4 41853272 0t0 TCP c8d3ff3acb80:ssh->LAPTOP-2F4Q9UQR:53634 (ESTABLISHED) sshd 8276 root 3u IPv4 41853293 0t0 TCP c8d3ff3acb80:ssh->LAPTOP-2F4Q9UQR:53635 (ESTABLISHED)查看连接到某个主机的网络情况
lsof -i @10.0.1.201 看特定端口 lsof -i @10.0.1.201:22列出当前机器监听的端口
lsof -i -s TCP:LISTEN
生产案例 zombie 僵尸进程
1.通过 top 查看是否存在zombie 僵尸进程
# top
top - 14:53:32 up 86 days, 9:47, 2 users, load average: 2.09, 1.91, 1.79
Tasks: 1248 total, 1 running, 1246 sleeping, 0 stopped, 1 zombie
Cpu(s): 16.5%us, 7.3%sy, 0.0%ni, 72.9%id, 3.1%wa, 0.0%hi, 0.2%si, 0.0%stload average负载大于1
1 zombie 存在一个僵尸进程
2.查看具体是哪个进程
# ps -A -o stat,ppid,pid,cmd | grep -e "^[Zz]"
Z 2216 31127 [abrt-server] <defunct>
grep -e "^[Zz]": 是一个过滤器,用于筛选出包含以大写字母Z或小写字母z开头的行。在这里,它的作用是过滤出进程状态为僵尸(Z)的行。
3.查看僵尸进程是什么应用
lsof -p 22164.kill僵尸进程
kill -9 2216