进程与线程
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
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知识必备