linux系统进程管理

进程与线程

1.进程 :是系统资源管理的最小单位
2.线程 :是程序执行的最小单位
3.线程比进程小
4.线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一地址上
5.多个程序在同一时间请求,CPU根据”先进先出” 原则执行线程。而其他的线程则在线程队列中等待

一个正在执行的进程称为一个任务,一个任务可以包含多个进程,因此对任务的控制即是对正在运行的进程进行控制

Linux系统最高进程
Linux系统启动后即产生了第一个进程,即systemd进程。此进程的PID号(进程号)为1, 所有子进程都是通过(父进程)systemd进程衍生 (fork)的,如果某个进程父进程意外结束,子进程会以systemd作为父进程


查看进程信息与状态 ps

ps [options]

a显示当前终端下所有用户的进程
x选择所有不在当前终端下的进程。
u查看进程的UID或账户名
e 选择所有的进程
f 列示完整的列表
l 显示进程的所属者,进程号和父进程号

# ps aux | head -n5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.1  0.3 193628  6764 ?        Ss   09:15   0:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    09:15   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    09:15   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   09:15   0:00 [kworker/0:0H]

表头释义:

USER:程序是以哪个用户名的名义运行
PID:进程号,PID号范围为1-32768,至最高值,则循环。
%CPU:进程的CPU使用率
%MEM:进程的MEM使用率
VSZ:进程所使用的虚拟内存大小(Virtual Size)
RSS:进程使用的驻留集大小或实际内存的大小 (Kbytes)
TTY:进程在哪个TTY执行的
STAT:进程的状态
START:进程启动时间及日期
TIME:进程使用的总CPU时间
COMMAND:正在执行的命令及参数

# ps -elf | head -5
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 48407 ep_pol 09:15 ?        00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
1 S root          2      0  0  80   0 -     0 kthrea 09:15 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 09:15 ?        00:00:00 [ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker 09:15 ?        00:00:00 [kworker/0:0H]

表头释义:

F:标记.1.进程forked(交叉),但未执行exec调用 4.用特权用户权限
S:进程状态,以1个字符进行表示
PID:执行此进程的PID
PPID:此进程的父进程号
C:进程CPU的使用率,为整数
PRI:进程优先级编号
NI:优先级
ADDR:进程所在内存地址
SZ:实际占用的物理内存大小
WCHAN:使用kernel函数的进程处于休眠状态
STIME:进程启动的时间
TTY:进程在哪个终端执行
TIME:进程执行所花费的时间
CMD:执行的命令及参数


生成新报表 ps

# ps
   PID TTY          TIME CMD
  2417 pts/0    00:00:01 bash
  4568 pts/0    00:00:00 ps
  
# ps -o pid,pcpu,nice,comm,tty,time
   PID %CPU  NI COMMAND         TT           TIME
  2417  0.0   0 bash            pts/0    00:00:01
  4567  0.0   0 ps              pts/0    00:00:00
 
#显示PID,命令,pri优先级(数字越大,优先级越高),nice优先级,realtime优先级
# ps xo pid,cmd,pri,nice,rtprio | head -4
   PID CMD                         PRI  NI RTPRIO
     1 /usr/lib/systemd/systemd --  19   0      -
     2 [kthreadd]                   19   0      -
     3 [ksoftirqd/0]                19   0      -

看系统占用内存最高的进程的TOP10
ps aux | sort -rnk4 | head -10 | awk '{print $4,$11}'
//r降序,n 数值排序,-k以文本的那一列进行判断

查看系统占用CPU最高的进程的TOP10
ps aux | sort -rnk3 | sed '/%CPU/d' | head -n10 | awk '{print $3,$11}'

杀掉僵尸进程
ps –eal | awk ‘{if ($2 == “Z”){print $4}}' | xargs kill -9

根据进程PID或命令互查
ps -p 1236 -o comm=
ps -C sleep -o pid=

查看进程树并显示进程属主和进程ID(可不带用户名)
pstree -lpu apache #l 长格式(显示名称和PID),p显示PID,u显示进程属主
pgrep -lo httpd #l 长格式,oldest,newest
pgrep -ln httpd #查看httpd最新开启的进程
pgrep -l httpd
pidfo bash #显示bash进程的PID


类似windows的资源管理器,实时显示当前系统资源情况 top

linux系统进程管理_第1张图片

top输出:
第一行:1.当前系统时间 2.uptime时间3.当前登入系统的账户总数 4.当前系统1、5、15分钟的系统负载值(即任务队列的平均长度,数值超过核心数即为负载过大,按1展开显示各个CPU的核心状态)


列出进程所打开的文件的信息 lsof

# lsof -u alex| head -n4
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF       NODE NAME
bash    5300 alex  cwd    DIR  253,0      4096     393217 /root
bash    5300 alex  rtd    DIR  253,0      4096          2 /
bash    5300 alex  txt    REG  253,0    960392     394955 /usr/bin/bash

lsof输出:
1.COMMAND:进程的名称 2.PID:进程标识符 3.USER:进程所有者 4.FD:文件描述符,应用程序通过文件描述符识别该文件 5.TYPE:文件类型 6.DEVICE:指定磁盘的名称 7.SIZE:文件的大小 8.NODE:索引节点(文件在磁盘上的标识) 9.NAME:打开文件的确切名称

查看文件系统阻塞 lsof /boot
查看打开指定文件的所有进程 lsof /var/log/message
显示指定目录下被进程打开的文件 lsof +d /var/log
查看端口号被哪个进程占用 lsof -i :3306
查看用户打开哪些文件 lsof –u username
查看进程打开哪些文件 lsof –p 4838
查看远程已打开的网络链接 lsof –i @192.168.0.128
列出除了某个用户外被打开的文件 lsof -u root
列出某个程序所打开的文件 lsof -c cron
列出多个PID所打开的文件 lsof -p 123,234,111
列出某个用户组所打开的文件 lsof -g 0


进程/终端控制 kill

 # kill -19 2345    #挂起PID为2345的进程
 # kill -9 3245      #强行终止PID为3245的进程
 # killall bash        #终止bash同名程序
 # killall5 -9          #终止所有进程,慎用
 # pkill -t tty1       #终止tty1终端的连接

任务优先级 nice
在程序启动时直接赋予相关进程的优先级,最高的优先级指数是-20,最低是19
还记得ps -elf的第八列是任务优先级信息吗?

如对app脚本设置最低优先级

# nice 19 ./app &
#ps -elf  | grep app |grep -v grep | awk '{print $5}'

#更改PID为2784的进程优先级为最高优先级renice

# renice -20 2784

输出CPU和磁盘I/O相关的统计信息iostat

# iostat
Linux 3.10.0-514.el7.x86_64 (centos7)   2019年05月19日  _x86_64_        (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.13    0.01    0.00   99.84

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               4.79       126.83         6.41     242746      12276
scd0              0.01         0.03         0.00         54          0
dm-0              5.11       113.05         6.38     216373      12220

表头释义:

第1行: 1.kernel版本(完整的主机名称)2. 报告生成日期3. 系统架构(CPU数)
第3行avg-cpu CPU平均值
%user 在用户运行进程所占用的CPU百分比
%nice 进程优先级操作所占用的CPU百分
%system 系统级别(kernel)运行所使用的CPU百分比
第6行1. tps 每秒钟传输的IO请求的数量 Blk_read/s 块设备每秒钟读取的数量 Blk_wrtn/s 块设备每秒钟写入的数量Blk_read 块设备读出的总数 blk_wrtn 块设备写入的总数

>每2秒显示一次设备统计信息,输出6次 iostat -d 2 6
每2秒以K为单位显示一次设备统计信息,且显示 LVM映射名称,共计10次 iostat -dNk 2 10

>监控CPU、内存、虚拟内存交换、IO读写等各种情况的使用 vmstat
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1408656  19508 309476    0    0    10     1   18   18  0  0 100  0  0

表头释义:

Proc进程:1.r 表示运行队列,2.b 阻塞队列
Memory内存:1.swap 当前swap使用k数的情况2.free 当前物理内存空闲的k数buff 内存使用的buff总数,一般为块设备操作,文档权限记录等 3.cache 内存使用的cache总数,一般打开文件,运行程序等使用
swq 虚拟内存1. si 每秒钟从磁盘读入到swap的大小,不可长期>0 2. so 每秒钟从swap写入到磁盘的大小,不可长期>0
IO块设备:1.bi 块设备每秒接收到的块数 2.bo 块设备每秒发送的块数
System系统情况:1.in 系统的每秒中断数总计(含时钟中断) 2.cs 每秒上下文切换的次数(系统调用,环境变化等)
cpu情况:1.us 用户(及优先级)占用CPU时间 2.sy 系统(kernel级)占用CPU时间 3.id 闲置CPU时间 4.wa io等待CPU时间 6.st 一个虚拟机占用的CPU时间(
如kvm)

▪procs:r这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)
▪ memory:swapd列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。

▪ swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。
▪ io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。
▪ system:显示每秒中断(in)和上下文切换(cs)的数量。
▪ cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。

每2秒采样1次,总计10次 #vmstat 2 10

系统性能分析工具 sar


PS:

linux知识必备

你可能感兴趣的:(linux系统进程管理)