Linux负载之进程管理

^ _ ^ Linux负载之进程管理ps、pidstat、dstat、top、htop与负载试验
^ _ ^ linux中memory内存管理

1、进程概述

父进程复制自己的地址空间 ( fork ) 创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID ( PID ),满足跟踪安全性之需。
任何进程都可以创建子进程。
所有进程都是第一个系统进程的后代。
Centos5/6系统进程:init
Centos7+系统进程:systemd

1.1、查看当前CPU几核几线程

cpu个数:是指物理上cpu的个数。
cpu核心数:是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。
cpu线程数:是一种逻辑上的概念,简单地说,就是模拟出的CPU核心数。(比如:可以通过一个物理的CPU核心模拟出2线程的CPU。一个物理的CPU核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。)

在Linux中,可以利用grep命令来查看CPU的核心数和线程数。

1、查看CPU个数

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

2、查看每个CPU的核心数

grep 'core id' /proc/cpuinfo | sort -u | wc -l

3、查看线程数

grep 'processor' /proc/cpuinfo | sort -u | wc -l
  • 例1:1物理2核心4线程
    在这里插入图片描述
    此服务器有1个CPU,每个CPU有2个核心,每个核心有2个线程,所以线程数为4。

  • 例2:1物理4核心4线程
    在这里插入图片描述
    此服务器有1个CPU,每个CPU有4个核心,每个核心有1个线程,所以线程数为4。

1.2、父进程and子进程

1.3、进程的生命周期

1.4、对CPU负载的理解

可以将CPU负载理解为车道的负载,对单车道而言:

如果路面上的车不多,没有占满车道,那么load < 1;
如果占满了车道,load = 1;
如果车道外面还有车在等待,load > 1;

需要注意的是,load = 1 不代表CPU无法工作了,这只是表示满负荷运行,例如实际生活中的例子,车道占满了,但是车流还能有序前进。

平均负载基本概念
平均负载是指单位时间内,系统处于R状态与D状态的平均进程数,与cpu使用率无关,进程状态可使用 ps -aux 查看。
平均负载理想状态下等于CPU个数
CPU个数查询 cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
例如在2个CPU的机器上,平均负载为1,那么cpu有50%的空闲,当平均负载大于cpu个数时,表示系统出现过载,过载超过cpu数量70%时,需要排查负载过高问题。

1.5、使用signal控制进程

信号的种类:kill -l 列出支持的信号。
信号9,15:9) SIGKILL:。15) SIGTERM:

kill -1 8878
kill -9 8878
kill -15 8878

编号) 信号名 汉语描述
1) SIGHUP 重新加载配置。
2) SIGINT 键盘中断Ctrl + C。
3) SIGQUIT 键盘退出Ctrl + \,类似SIGINT。
9) SIGKILL 强制终止,无条件。
15) SIGTERM 终止(正常结束),缺省信号。
18) SIGCONT 继续。
19) SIGSTOP 暂停。
20) SIGTSTP 键盘暂停Ctrl+Z。

1.6、前后进程Process控制

&
jobs
fg
bg

1.7、虚拟文件系统/proc/*

虚拟文件系统:采集服务器自身 内核、进程 运行的状态信息。

cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/cmdline

2、top 命令

top:动态列出 Linux 进程。

2.1 top 字段显示说明

top - 20:06:18 up 13 min,  1 user,  load average: 0.00, 0.01, 0.05

20:06:18:当前时间
up 13 min:运行时长
1 user:登录当前系统上的用户数
load average: 0.00, 0.01, 0.05:1分钟,5分钟,15分钟的负载压力【平均负载(等待运行的队列长度的负载)。建议不能超过5,超过5会导致宕机。】(如果三个参数值差距不大,表示系统负载平稳;当1分钟的值比5分钟或15分钟的值小很多,表示最近1分钟负载减少;反之表示最近1分钟负载增加;)

Tasks:  91 total,   1 running,  90 sleeping,   0 stopped,   0 zombie

Tasks: 任务
91 total:一共运行多少进程
1 running:几个进程处于运行
90 sleeping:多少个进程处于睡眠
0 stopped:多少个停止
0 zombie:多少个僵尸进程

%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

%Cpu:cpu 占用百分比。
0.0 us:用户空间占用CPU百分比 “user CPU time”。
0.3 sy:内核空间占用CPU百分比 “system CPU time”。
0.0 ni:用户进程空间内改变过优先级nice值的进程占用CPU百分比 “nice CPU time”。
99.7 id:空闲CPU百分比 “idle”。
0.0 wa(wait):等待IO输入输出的CPU时间百分比 “iowait” 。
0.0 hi:处理硬件中断所占用的百分比 “hardware irq”。
0.0 si:处理软件中断所占用的百分比 “software irq”。
0.0 st:被偷走的百分比(虚拟化程序) “steal time”。

KiB Mem :  8154928 total,  6916884 free,   598484 used,   639560 buff/cache

KiB Mem:内存空间占用,以 KB 为单位:
8154928 total:总内存空间
6916884 free:剩余内存空间
598484 used:已用内存空间
639560 buff/cache:用于缓存和缓冲的内存空间

KiB Swap:  2097148 total,  2097148 free,        0 used.  7302244 avail Mem 

KiB Swap:swap 空间占用,以 KB 为单位
2097148 total:总空间
2097148 free:剩余空间
0 used:已用空间
7302244 avail Mem :有效 swap 大小

 PID USER      PR  NI    VIRT    RES    SHR  S  %CPU  %MEM     TIME+  COMMAND
1206 mysql     20   0 1204216 190060   6160  S   3.0   2.3   0:03.89  mysqld
 814 rabbitmq  20   0 2287908  83312   4372  S   1.3   1.0   0:16.02  beam.smp

PID:用户 pid
USER:用户名称
PR:优先级
NI:nice 值
VIRT:占用virtual size 虚拟内存集
RES:常驻内存集;
SHR:共享内存空间
S:当前状态
%CPU:占据 CPU 百分比
%MEM:占据 MEM 百分比
TIME+:运行时长
COMMAND:命令

2.2 top 内排序

P:以占据 CPU 百分比排序
M:以占据内存百分比排序
T:累积占用 CPU 时间排序

2.3 首部信息命令

l 命令:(小写的L)uptime 信息。
t 命令:tasks 及 cpu 信息;可以禁用显示硬盘及 cpu 相关消息。
m 命令:内存信息;可以将内存使用率用 ||| 显示 或者 白空格 显示
s 命令:修改刷新时间间隔。
k 命令:终止指定的进程。
q 命令:退出命令。

选项:
-d #:指定刷新时间间隔,默认为 3 秒。
   -b:以批次方式显示。
-n #:显示多少批次。

2.4 top小试验

间隔每3s监控一次
top -d 3
间隔每3s监控一次进程pid为 21669655
top -d 3 -p 2166,9655

3 dstat 命令

dstat:dstat 是一个性能统计工具(动态);用于监测系统 CPU、内存、磁盘和网络等资源的使用情况,同时还可以生成有关性能指标的实时图表。

yum install dstat -y
dstat [-afv] [options..] [delay [count]]

1、是每5s显示一条。
dstat 5
2、表示每5s显示一条,一共显示3条。
dstat 5 3

3、打印各项性能指标的实时信息;默认使用的是-cdngy参数。
   此命令将在终端中显示各项性能指标的实时信息,包括 CPU 使用率、内存使用率、磁盘 I/O 等。
dstat 2 2
dstat -cdngy 1 1

4、输出 cpu 使用率、内存和磁盘 I/O 的实时图表
   此命令将通过 dstat 获得 cpu 使用率、内存和磁盘 I/O 的实时数据,并在终端中生成对应的实时图表。
dstat -c --mem --io 1 1

5、输出网络 I/O 情况
   此命令将显示网络的 I/O 情况,包括网络接口的传输速度、包数量等。
dstat -n 1 1

6、输出进程信息
   此命令将显示正在运行的进程的相关信息,包括 CPU 使用率、内存使用率、进程数量等。
dstat -p 1 1

7、输出系统负载信息;
   此命令将显示系统负载信息,包括 CPU 使用率、I/O 等。
dstat -l 1 1

8、输出完整的模块列表;此命令将显示全部可用的模块。
dstat --list

dstat 是一款非常强大的系统性能监控工具,对于系统管理员来说,它是一个必不可少的性能监测工具。

4 ps 命令

用于显示当前进程的状态(非动态)。
ps [options]
选项有三种风格:
1、UNIX 风格 —— 必须在选项前面加 -
2、BSD 风格 —— 选项前不能加 -
3、GNU 风格 —— 选项前为两个 -

4.1、ps aux

a:所有与终端相关的进程。
x:所有与终端无关的进程。
u:以用户为中心组织进程状态信息显示。

ps aux
☆☆☆☆☆☆使用grep后显示表头的折中方法☆☆☆☆☆☆
ps aux | grep -E "^USER|mysql"
ps auxw | head -1; ps auxw | grep "ssh"
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

在这里插入图片描述
USER:用户。
PID:进程号。
CPU%:cpu 时间占用比率。
MEM%:内存占用百分比。
VSZ:占用虚拟内存;virtual size 虚拟内存集(硬盘)。
RSS:占用实际内存;Resident Size,常驻内存集。
TTY:终端类型:?是系统打开的;pts/0终端。
STAT:进程状态 man ps (/STATE)。
          R:running 运行。
          S:interruptable sleeping 可中断睡眠。
          D:uninterruptable sleeping 不可中断睡眠。
          T:Stopped 停止。
          Z:zombie 僵死态。
          +:前台进程。
          l:多线程进程。
          N:低优先级进程。
          <:高优先级进程。
          s:session leader 进程领导者。
START:进程的启动时间。
TIME:进程占用CPU的总时间。
COMMAND:程序。

指定列升降序排列
ps aux --sort=+%cpu    升序
ps aux --sort=-%cpu    降序

4.2、ps -ef

在这里插入图片描述

-e:显示所有进程
-f:显示完整格式的进程信息

4.3、ps -eFH

在这里插入图片描述

-F:显示完整格式的进程信息;
C:cpu utilization cpu 占用百分比
PSR:运行于哪颗 CPU 之上
-H:以层级结构显示进程的相关信息;

4.4、ps -eo, axo

ps -eo field1, field2, …:自定义要显示的字段列表,以逗号分隔
ps axo field1, field2, …:自定义要显示的字段列表,以逗号分隔
常用的 field:pid, ni, priority, psr, pcpu, stat, comm, tty, ppid, rtprio
pid:进程的 pid 号
ni:nice 值(nice)
priority:优先级
psr:运行在那颗 cpu
pcpu:cpu 利用率
ppid:父进程的 id 号
rtprio:实时优先级

ps axo user,pid,ppid,%cpu,%mem,tty,stat,start,time,command | head -n3
ps axo user,pid,ppid,ni,priority,psr,cpu,pcpu,stat,tty,rtprio | head -n3

ps -eo user,pid,ppid,%cpu,%mem,tty,stat,start,time,command | head -n3
ps -eo user,pid,ppid,ni,priority,psr,cpu,pcpu,stat,tty,rtprio | head -n3

在这里插入图片描述

4.5、进程状态 PROCESS STATE CODES

Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:
    D    uninterruptible sleep (usually IO)
    R    running or runnable (on run queue)
    S    interruptible sleep (waiting for an event to complete)
    T    stopped by job control signal
    t    stopped by debugger during the tracing
    W    paging (not valid since the 2.6.xx kernel)
    X    dead (should never be seen)
    Z    defunct ("zombie") process, terminated but not reaped by its parent

For BSD formats and when the stat keyword is used, additional characters may be displayed:
    <    high-priority (not nice to other users)
    N    low-priority (nice to other users)
    L    has pages locked into memory (for real-time and custom IO)
    s    is a session leader
    l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
    +    is in the foreground process group

小例子

1、查询端口号占用,根据端口查看进程信息
lsof -i:8001
2、根据进程号查看进程对应的可执行程序
ps -f -p 8141
3、手工终止进程的运行
kill -9 8041

5、pidstat 命令

pidstat - Report statistics for Linux tasks.

在Debian/Ubuntu系统:
apt-get install -y sysstat
在CentOS/Fedora/RHEL系统:
yum install -y sysstat

pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

-u:默认的参数,显示各个进程的cpu使用统计。
-r:显示各个进程的内存使用统计。
-d:显示各个进程的IO使用情况。
-p:指定进程号。
-w:显示每个进程的上下文切换情况。
-t:显示选择任务的线程的统计信息外的额外信息。
-T { TASK | CHILD | ALL }:这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量。
-l:显示命令名和所有参数。

5.1、查看所有进程的CPU使用统计( -u -p ALL)

显示各活动进程的cpu使用统计
pidstat
pidstat -u -p ALL

pidstat   =等效于=   pidstat -u   =等效于=   pidstat -u -p ALL

在这里插入图片描述

PID:进程ID。
%usr:进程在用户空间占用cpu的百分比。
%system:进程在内核空间占用cpu的百分比。
%guest:进程在虚拟机占用cpu的百分比。
%wait
%CPU:进程占用cpu的百分比。
CPU:处理进程的cpu编号。
Command:当前进程对应的命令。

5.2、内存使用情况统计(-r)

显示各活动进程的内存使用统计
pidstat -r

在这里插入图片描述

PID:进程标识符
minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页。
majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页。
VSZ:虚拟地址大小,虚拟内存的使用KB。
RSS:常驻集合大小,非交换区五里内存使用KB。
%MEM
Command:task命令名。

5.3、显示各个进程的IO使用统计(-d)

pidstat -d

在这里插入图片描述
PID:进程id。
kB_rd/s:每秒从磁盘读取的KB。
kB_wr/s:每秒写入磁盘KB。
kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
iodelay
COMMAND:task的命令名。

5.5、显示每个进程的上下文切换统计(-w)

pidstat -w -p 10379

在这里插入图片描述

PID:进程id。
cswch/s:每秒主动任务上下文切换数量。
nvcswch/s:每秒被动任务上下文切换数量。
Command:命令名。

5.6、显示选择任务的线程的统计信息外的额外信息 (-t)

pidstat -t -p 10379

在这里插入图片描述

TGID:主线程的表示。
TID:线程id。
%usr:进程在用户空间占用cpu的百分比。
%system:进程在内核空间占用cpu的百分比。
%guest:进程在虚拟机占用cpu的百分比。
%CPU:进程占用cpu的百分比。
CPU:处理进程的cpu编号。
Command:当前进程对应的命令。

5.7、pidstat -T

// TASK表示报告独立的task
pidstat -T TASK
// CHILD表示报告进程下所有线程统计信息
pidstat -T CHILD
// ALL表示报告独立的task和task下面的所有线程
pidstat -T ALL


注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

在这里插入图片描述

在这里插入图片描述
PID:进程id。
usr-ms:任务和子线程在用户级别使用的毫秒数。
system-ms:任务和子线程在系统级别使用的毫秒数。
guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。
Command:命令名。

6、htop 命令

htop: 交互式进程查看器。htop [-dus]。htop 是一个非常强大的工具,下面从 F1 到 F10 可以看到具体的参数信息。yum install htop -y

选项:
-d #:指定延迟时间间隔
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
常用子命令:
l:显示选定的进程打开的文件列表
s:跟踪选定的进程的系统调用
t:以层级关系显示各进程状态
a:将选定的进程绑定至某指定的 CPU 核心
此处可以添加指定项到显示屏幕上面,显示方式可以是 [Bar] [Text] [Graph] [LED]

7、平均负载试验案例

yum install -y stress
使用8个进程对cpu;4个进程对硬盘IO;2个进程对内存;5个进程对文件(创建、写入、删除)压测10s。
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --hdd 5 --timeout 10s

7.1、cpu密集型负载试验

通过stress工具模拟cpu使用率100%场景
stress --cpu 1 --timeout 300
查看平均负载及cpu占用情况
top
pidstat -u 2 10

在这里插入图片描述

7.2、io密集型负载试验

通过stress工具模拟io密集型进程
stress -i 1 --timeout 300
top查看平均负载,
io使用率需通过mpstat -P ALL 5 10(5秒统计一次,统计10次)查看。
当iowait较高时使用pidstat -d 2 10找到对应进程。

-bash: mpstat: command not found 可通过 yum -y install sysstat安装

7.3、大量进程负载试验

stress -c 8 --timeout 600模拟8个进程,
top或
pidstat -u 2 10查看平均负载以及进程占用情况。

7.4、负载试验小总结

当服务器响应缓慢时可先通过top或pidstat -u 2 10查看cpu以及平均负载情况。
对于cpu占用不高,但平均负载较高情况,考虑是否io密集型应用导致,可通过mpstat -P ALL 5 10查看io使用率,也可通过pidstat -d 2 10直接找到对应进程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值