Linux 进程及作业管理
概述:
我们在实际的运维工作中经常要对服务器做各种监控,以了解其相关状态,比如,CPU利用率,磁盘空间利用率,等等,这就需要我们了解相关的数据并学会使用各种工具来分析数据。本章就将总结Linux系统中进程管理和作业管理的相关命令、参数和工具,包括:进程的相关定义、分类、状态以及进程查看和管理工具,如:pstree、ps、pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill ,以及作业管理的相关内容:job, bg, fg, nice,renice
第一篇:进程管理
一、进程的相关概念:
1.相关定义:
-
内核的功用:
进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等; -
通俗的来说进程是运行起来的程序。唯一标识进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的 ;
-
进程 Process:
运行中的程序的一个副本,是被载入内存的一个指令集合;
˙进程ID(Process ID,PID)号码被用来标记各个进程;
˙UID、GID、和SELinux语境决定对文件系统的存取和访问权限;
˙通常从执行进程的用户来继承;
˙存在生命周期; -
task struct:Linux内核存储进程信息的数据结构格式;
-
task list:多个任务的的task struct组成的链表;
2.进程创建:
-
init:第一个进程
父子关系 -
进程:都由其父进程创建,COW(写实复制)
fork(), clone() -
创建过程:
1.系统首先以fock的方式复制(cow)一个与父进程相同的进程,这个进程与父进程唯一的差别就是PID不同,但是这个进程还会多一个PPID的参数,PPID就是父进程的程序识别码PID;
2.然后新产生的进程开始加载实际要运行的程序进行执行。
3.进程优先级:
-
进程的优先级是用数字0-139来表示的,分为两类:
99-1:实时优先级,由内核维护(数字越大,优先级越高)
100-139:静态优先级,使用nice值来调整(数字越小,优先级越高);
-
Nice值:
-20,19对应静态优先级100-139 -
Big O:
时间复杂度,用时和规模的关系
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
4.进程内存:
-
Page Frame: 页框,用存储页面数据,存储Page 4k;
-
LRU:Least Recently Used 近期最少使用算法,释放内存;
注:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU, 操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
-
物理地址空间和线性地址空间;
-
MMU(内存管理单元):负责转换线性和物理地址
注:MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU) 中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址以 及 提供硬件机制的内存访问授权,多用户多进程操作系统。
5.IPC: 进程间通信 Inter Process Communication
-
在计算机网络体系中,主机与主机之间的通信,实质上是主机进程与主机进程之间的通信,也就是进程间的通信;
-
同一主机上
signal:信号指令;
shm: shared memory 共享内存空间
semophore:信号量,一种计数器 -
不同主机上:
rpc: remote procedure call
socket: 套接字,IP和端口号
6.Linux内核:抢占式多任务
7.进程类型:
根据进程与终端的关系可以分为:
-
守护进程: daemon,在系统引导过程中启动的进程,和终端无关的进程;
-
前台进程:跟终端相关,通过终端启动的进程;
注意:两者可相互转化
8.进程状态:
进程被内核调度的过程中的状态可以分为:
-
运行态:running
-
就绪态:ready
-
睡眠态:
可中断:interruptable
不可中断:uninterruptable,
通常是指被IO阻塞的过程,等待IO满足之前无法继续运行。
-
停止态:stopped,暂停于内存中,但不会被调度,除非手动启动;
-
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
9.进程的分类:
-
CPU-Bound:CPU密集型,非交互;
-
IO-Bound:IO密集型,交互;
-
根据在linux不同模式下运行分为:
核心态:这类进程运行在内核模式下,执行一些内核指令(Ring 0)。
用户态:这类进程工作在用户模式下,执行用户指令(Ring 3)。 -
如果用户态的进程要执行一些核心态的指令,此时就会产生系统调用,系统调用会请求内核指令完成相关的请求,就执行的结果返回给用户态进程。
10.进程与线程的关系:
-
进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位
-
线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
-
进程——资源分配的最小单位,线程——程序执行的最小单位
-
从函数调用上来说,进程创建使用fork()操作;线程创建使用clone()操作
参考资料:《Linux内核设计与实现》《深入理解Linux内核》
二、进程的系统管理工具:
-
Linux系统状态的查看及管理工具:
pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill pkill, job, bg, fg, nohup -
CentOS 5:SysV init
CentOS 6:upstart
CentOS 7:systemd
1.pstree命令:
pstree-display a tree of processes(显示查看进程树)
以下为CentOS 6 和 CentOS 7 的区别
[root@CentOS6 ~]# pstree init─┬─abrtd #可以看到都是有init生成的 ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─bonobo-activati───{bonobo-activat} ├─clock-applet ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─2*[dbus-daemon] ├─2*[dbus-launch] ├─devkit-power-da ├─dhclient ├─gconf-im-settin ├─gconfd-2
[root@centos7 ~]# pstree systemd─┬─NetworkManager─┬─2*[dhclient] │ └─2*[{NetworkManager}] ├─2*[abrt-watch-log] ├─abrtd ├─alsactl ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─chronyd ├─crond ├─cupsd ├─dbus-daemon ├─gssproxy───5*[{gssproxy}] ├─login───bash ├─lsmd ├─lvmetad ├─master─┬─pickup │ └─qmgr ├─polkitd───5*[{polkitd}]
2./proc:内核中的状态信息;
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
-
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
-
内核参数:
可设置其值从而调整内核运行特性的参数,在/proc/sys/下;
状态变量:其用于输出内核中统计信息或状态信息,仅用于查看; -
参数:模拟成文件系统;
-
进程:
/proc/#:
#:PID
2.启动进程的方式:
系统启动过程中自动启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程
三、显示系统当前进程的运行情况
ps: process state
ps-report a snapshot of the current processes
1.使用ps来查看进程信息
-
语法:ps[OPTION]…
-
支持三种选项:
UNIX选项 如 -a
BSD选项 如 a
GUN选项 如 –help -
选项和参数
默认显示当前终端中的进程;
a 所有与终端相关的进程;
x 所有与终端无关的进程;
u 显示进程所有者的信息;
f 显示进程的父进程;
o 属性… 选项显示定制的信息:
示例如下:
[root@CentOS6 1]# ps a PID TTY STAT TIME COMMAND 2024 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2 2026 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3 2028 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4 2030 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5 2032 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6 2105 tty1 Ss+ 0:00 -bash 3922 pts/1 Ss+ 0:00 /bin/bash 4864 pts/2 Ss 0:00 -bash 5142 pts/2 R+ 0:00 ps a
[root@CentOS6 1]# ps PID TTY TIME CMD 4864 pts/2 00:00:00 bash 5144 pts/2 00:00:00 ps
2.常用组合之一:aux
[root@CentOS6 1]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19344 1632 ? Ss 08:27 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 08:27 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 08:27 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 08:27 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S 08:27 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S 08:27 0:00 [watchdog/0] root 7 0.0 0.0 0 0 ? S 08:27 0:18 [events/0] root 8 0.0 0.0 0 0 ? S 08:27 0:00 [events/0] root 9 0.0 0.0 0 0 ? S 08:27 0:00 [events_long/0] root 10 0.0 0.0 0 0 ? S 08:27 0:00 [events_power_ef] root 11 0.0 0.0 0 0 ? S 08:27 0:00 [cgroup] root 12 0.0 0.0 0 0 ? S 08:27 0:00 [khelper]
首行代表的含义如下:
USER:进程的发起者;
PID: 进程号;
%CPU:进程使用掉的cpu资源百分比;
%MEM:进程所占的物理内存百分比;
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSidentSize, 常驻内存集
STAT:进程状态
R:running
S: interruptable sleeping 可中断睡眠
D: uninterruptable sleeping 不可中断睡眠
T: stopped 停止状态
Z: zombie 僵死态
+: 前台进程
l: 多线程进程
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者;
START:进程被触发的时间;
TIME: 进程实际使用cpu的时间;
COMMAND:触发此进程的命令
3.常用组合之二:-ef
-e: 显示所有进程
-f: 显示完整格式程序信息
[root@CentOS6 1]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:27 ? 00:00:01 /sbin/init root 2 0 0 08:27 ? 00:00:00 [kthreadd] root 3 2 0 08:27 ? 00:00:00 [migration/0] root 4 2 0 08:27 ? 00:00:00 [ksoftirqd/0] root 5 2 0 08:27 ? 00:00:00 [stopper/0] root 6 2 0 08:27 ? 00:00:00 [watchdog/0] root 7 2 0 08:27 ? 00:00:20 [events/0] root 8 2 0 08:27 ? 00:00:00 [events/0] root 9 2 0 08:27 ? 00:00:00 [events_long/0] root 10 2 0 08:27 ? 00:00:00 [events_power_ef] root 11 2 0 08:27 ? 00:00:00 [cgroup] root 12 2 0 08:27 ? 00:00:00 [khelper] root 13 2 0 08:27 ? 00:00:00 [netns] root 14 2 0 08:27 ? 00:00:00 [async/mgr]
首行代表的含义:
UID/PID/PPID: 代表该进程的发起者/进程号/父进程号;
C: 代表cpu的使用率,单位为百分比;
STIME: 表示进程的启动时间,就是指从什么时候启动的进程;
TTY: 登陆者的终端位置,远程登录则显示pts/n,本地登录的显示ttyn,?表示系统进程
TIME:表示实际花费cpu运行时间,不是系统时间;
CMD: command的缩写,触发此命令的进程
4.常用组合之三:-eFH
-F: 显示更完整格式的进程信息
C:cpu utillization(cpu使用率)
PSR:运行于哪颗cpu之上
-H: 以进程层级格式显示进程相关信息
[root@CentOS6 1]# ps -eFH UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 2 0 0 0 0 0 08:27 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 08:27 ? 00:00:00 [migration/0] root 1 0 0 4836 1632 0 08:27 ? 00:00:01 /sbin/init root 581 1 0 2709 952 0 08:27 ? 00:00:00 /sbin/udevd -d root 2033 581 0 2708 940 0 08:27 ? 00:00:00 /sbin/udevd -d root 2034 581 0 2708 920 0 08:27 ? 00:00:00 /sbin/udevd -d root 1525 1 0 6899 868 0 08:27 ? 00:00:00 auditd root 1559 1 0 62288 1696 0 08:27 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5 rpc 1610 1 0 4745 892 0 08:27 ? 00:00:00 rpcbind dbus 1630 1 0 5559 1700 0 08:27 ? 00:00:00 dbus-daemon --system rpcuser 1652 1 0 5838 1380 0 08:27 ? 00:00:00 rpc.statd root 1687 1 0 47243 3360 0 08:27 ? 00:00:00 cupsd -C /etc/cups/cupsd.conf
常用组合之四 :-eo axo
-
o field1,field2…:自定义要显示的字段,以逗号分隔
-
常用的字段:pid,ni,pri,pcpu,stat,comm,tty,ppid
ni: nice值
priority:优先级
psr: processor, CPU编号
rtprio: 实时优先级
示例如下:
[root@CentOS6 1]# ps -eo pid,tty,ni,comm PID TT NI COMMAND 1 ? 0 init 2 ? 0 kthreadd 3 ? - migration/0 4 ? 0 ksoftirqd/0 5 ? - stopper/0 6 ? - watchdog/0 7 ? 0 events/0 8 ? 0 events/0 9 ? 0 events_long/0 10 ? 0 events_power_ef 11 ? 0 cgroup
四、搜索进程
1.最灵活:ps选项| 其它命令
如下所示:
[root@CentOS6 ~]# ps aux |grep postfix root 1945 0.0 0.3 80896 3436 ? Ss 08:27 0:00 /usr/libexec/postfix/master postfix 1952 0.0 0.3 81144 3440 ? S 08:27 0:00 qmgr -l -t fifo -u postfix 5960 0.0 0.3 80976 3400 ? S 21:48 0:00 pickup -l -t fifo -u root 5971 0.0 0.0 103320 944 pts/2 S+ 21:50 0:00 grep --color=auto postfix
2.pgrep,pkill
按预定义的模式检索,显示指定的进程信息
语法:pgrep[options] patter
选项:
-u uid: effective user,生效者
-U user: real user,显示以指定用户身份运行的进程;
[root@CentOS6 ~]# pgrep -U postfix 1952 5960
-t terminal: 与指定终端相关的进程
-l: 显示pid和进程名
-a: 显示完整格式的进程名
[root@centos7 ~]# pgrep -U postfix -l 1180 qmgr 2896 pickup [root@centos7 ~]# pgrep -U postfix -a 1180 qmgr -l -t unix -u 2896 pickup -l -t unix -u
-P pid: 显示父进程为此处指定的进程的进程列表
[root@centos7 ~]# ps -eFH |grep sshd root 2236 1088 0 36394 5572 0 14:34 ? 00:00:02 sshd: root@pts/1 [root@centos7 ~]# pgrep -P 1088 2236
直接按模式搜索:
[root@centos7 ~]# pgrep ssh #按ssh 开头的的进程搜索 1088 2236 [root@centos7 ~]# pgrep ss 821 1088 2236 [root@centos7 ~]# pgrep http
3.pidof 命令
根据进程名取其pid
语法:pidof PROGRAM(给定命令行程序)
[root@centos7 ~]# pidof sshd 2236 1088
五、进程管理工具
1.uptime 命令
-
显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1);
-
系统平均负载:指在特定时间间隔内运行队列中的平均进程数;
-
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题;
-
如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
示例如下:
[root@centos7 ~]# uptime 22:22:11 up 13:54, 2 users, load average: 0.00, 0.01, 0.05
2.top命令
– display Linux processes
相对于ps而言,ps显示的是某个时间点的进程状态信息,然而在实际的运用当中,我们可能需要动态的持续监控进程的运行状态,top命令就可以实现这一功能。
top - 22:29:39 up 14:02, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 359 total, 2 running, 357 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 KiB Mem : 1001332 total, 660132 free, 157192 used, 184008 buff/cache KiB Swap: 2098172 total, 2098172 free, 0 used. 678584 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2982 root 20 0 146276 2268 1424 R 0.3 0.2 0:00.09 top 1 root 20 0 41340 3812 2396 S 0.0 0.4 0:03.32 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.51 ksoftirqd/0 6 root 20 0 0 0 0 S 0.0 0.0 0:00.32 kworker/u256:0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/4 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/5 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/6 16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/7 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/8
1)排序:
P:以占据cpu百分比排序;
M:以占据内存百分比排序;
T:累计占用cpu时间排序
2)首部信息:
uptime信息:l 命令 是否显示;
tasks及cpu:t 命令 是否显示;
内存信息: m 命令 是否显示;
3)退出命令: q
刷新时间间隔:s
终止指定进程:k
4)选项:
-d #:指明延迟时长,单位为妙;
-n #:显示的批次数量;
-b :batch,批次显示;
每一行代表的含义如下:
第一行:uptime信息
1.系统当前的时间,即:22:29:39
2.系统启动到现在所经过的时间,即:up 14:02
3.当前已登录系统的用户数,即:2 users
4.系统在1,5,15分钟的平均负载,值越小表示系统越空闲,如果高于1,就需要注意当前系统负载过高。
第二行:
显示的是目前进程的总量与个别程序在什么状态(running,sleeping,stopped,zombie),需要注意的是最后的zmobie值,如果不是0就要查看下哪个进程处于僵死状态;
第三行:
显示的是cpu的整体负载,如果说是多核心的cpu,可以按下数字1来切换成不同cpu的负载率;
us:user space用户运行程序占用CPU的百分比;
sy:system (kernel space)用于运行内核占用CPU百分比;
ni:nice用户进程空间所改变优先级的进程占用CPU的百分比;
id:idle空闲CPU百分比;
wa:wait io 等待I/O花费时间;
hi:hardware interrupt 硬件中断占用CPU百分比;
si:software interrupt 软件中断占用CPU百分比;
st:stolen,被虚拟机“偷走”的百分比
第四行:
表示物理内存的使用情况;
第五行:
表示交换分区的使用情况;
第六行:
这里默认是空白显示,当在top程序当中输入命令时,显示状态的地方,这里可以输入的命令有:
P:以占据CPU百分比大小排序;
M:以占据Memory空间大小排序;
T:CPU累计占用时间排序;
l:是否显示系统负载行;
t:是否显示进程摘要信息及CPU负载状态;
1:这里是数字1,平均或单独显示CPU的负载状态;
m:是否显示内存相关的状态信息;
q:退出命令;
s:修改延迟时长;
k:终止指定进程
top命令行代表含义:
PID: 每个进程ID;
USER:进程所属的使用者;
PR: Priority的简写,进程的优先级,越小优先级越高;
NI: Nice的简写,与Priority有关,也是越小越早被运行;
VIRT:进程需要的虚拟内存大小,而非使用的虚拟内存大小;
RES: 进程当前使用的内存大小,不包括swap;
SHR: 进程与其他进程共享的内存大小,可通过RES-SHR来计算进程所占用的物理内存
S: 进程状态;
%CPU:CPU的使用率;
%MEM:物理内存是使用率;
TIME+:CPU使用时间的累加
3.htop命令
除了top命令外,还有一个top的增强版命令htop,系统默认情况下没有安装,需要epel源来进行安装;(在工作中epel源,直接指定阿里云,网易或者搜狐的镜像网站即可)
[epel] name=Fedora-epel/7/x86_64 baseurl=http://10.1.0.1/fedora-epel/$releasever/$basearch/ # 使用的是变量 6和7都适用 gpgcheck=0
安装好之后,直接通过 # yum install htop 命令进行安装,安装后执行htop命令即可,
如下:
帮助如下:
选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程;
-s COLUME: 以指定字段进行排序;
htop界面所支持的一些交互式命令:
s: 跟踪选定进程的系统调用;
l: 显示选定进程打开的文件列表;
a:将选定的进程绑定至某指定CPU核心;
t: 显示进程树
详细使用方法参考:
http://www.cnphp6.com/archives/65078
https://linux.cn/article-3141-1.html
六、内存工具
动态显示系统资源的使用情况,这些资源包括:内存、磁盘、网络、cpu等资源
1.vmstat命令:虚拟内存信息
vmstat[options] [delay [count]]
示例:
[root@centos7 ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 458712 1372 295840 0 0 4 0 29 24 0 0 99 0 0 [root@centos7 ~]# vmstat 2 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 458664 1372 295840 0 0 4 0 29 24 0 0 99 0 0 0 0 0 458664 1372 295840 0 0 0 0 21 21 0 0 100 0 0 0 0 0 458664 1372 295840 0 0 0 0 21 13 0 0 100 0 0
每一行所代表的含义:
-
procs:
r:等待运行的进程的个数,CPU上等待运行的任务的队列长度;
b:处于不可中断睡眠态的进程个数;被阻塞的队列的长度; -
memory:
swpd: 交换内存的使用总量;
free:空闲物理内存总量;
buffer:用于buffer的内存总量;
cache: 用于cache的内存总量; -
swap:
si:数据进入swap中的数据速率(kb/s);
so:数据离开swap的速率(kb/s); -
io:
bi:从块设备读入数据到系统的速度(kb/s);bo:保存数据至块设备的速率(kb/s);
-
system:
in:中断速率,每秒被终端的次数;
cs:上下文(进程)切换的速率; -
cpu:
us:user space 用户运行程序占用CPU的百分比;
sy:system(kernel space)用于运行内核占用CPU的百分比;id:idle 空闲CPU百分比;
wa:wait io 等到I/O花费的时间;st:stolen,被虚拟化技术偷走的百分比;
选项:
-s:显示内存统计数据
[root@centos7 ~]# vmstat -s 1001332 K total memory 245032 K used memory 188496 K active memory 178356 K inactive memory 458940 K free memory 1372 K buffer memory 295988 K swap cache 2098172 K total swap 0 K used swap 2098172 K free swap 8111 non-nice user cpu ticks 36 nice user cpu ticks 24887 system cpu ticks 7004201 idle cpu ticks 3772 IO-wait cpu ticks 0 IRQ cpu ticks 279 softirq cpu ticks 0 stolen cpu ticks 245987 pages paged in 39707 pages paged out 0 pages swapped in 0 pages swapped out 1998930 interrupts 1654583 CPU context switches 1473380853 boot time 4787 forks
2.pmap命令 报告进程的内存映射
report memory map of a process
pmap[options] pid[…]
-x: 显示详细格式的信息;
如下:
[root@centos7 ~]# pmap 1 1: /usr/lib/systemd/systemd --switched-root --system --deserialize 21 00007ff0a5d59000 16K r-x-- libuuid.so.1.3.0 00007ff0a5d5d000 2044K ----- libuuid.so.1.3.0 00007ff0a5f5c000 4K r---- libuuid.so.1.3.0 00007ff0a5f5d000 4K rw--- libuuid.so.1.3.0 00007ff0a5f5e000 224K r-x-- libblkid.so.1.1.0 00007ff0a5f96000 2048K ----- libblkid.so.1.1.0 00007ff0a6196000 12K r---- libblkid.so.1.1.0 00007ff0a6199000 4K rw--- libblkid.so.1.1.0
另外一种实现:
# cat /proc/PID/maps
如下:
[root@centos7 ~]# cat /proc/1/maps 7ff0a5d59000-7ff0a5d5d000 r-xp 00000000 08:03 33782768 /usr/lib64/libuuid.so.1.3.0 7ff0a5d5d000-7ff0a5f5c000 ---p 00004000 08:03 33782768 /usr/lib64/libuuid.so.1.3.0 7ff0a5f5c000-7ff0a5f5d000 r--p 00003000 08:03 33782768 /usr/lib64/libuuid.so.1.3.0 7ff0a5f5d000-7ff0a5f5e000 rw-p 00004000 08:03 33782768 /usr/lib64/libuuid.so.1.3.0 7ff0a5f5e000-7ff0a5f96000 r-xp 00000000 08:03 34593175 /usr/li
七、系统监控工具:
1.glances
glances是一款用于Linux、BSD的开源命令行系统监控工具。能够监视CPU、负载、内存、磁盘I/O、网络流量、文件系统、系统温度等信息。
如下:
-b: 以Byte为单位显示网卡数据速率
-d: 关闭磁盘I/O模块
-f:/path/to/somefile: 设定输入文件位置
-o:{HTML|CSV}:输出格式
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间间隔
-1:每个CPU的相关数据单独显示
C/S模式下运行glances命令
-
服务模式:
glances -s -B IPADDR
IPADDR: 指明监听的本机哪个地址
-
客户端模式:
glances -c IPADDR
IPADDR:要连入的服务器端地址
2.dsate命令:系统监控工具(很重要)
dstat是一个可以取代vmstat、iostat、netstat和ifstat这些命令的多功能产品。dastat可以很方便的监控系统运行状况并用于基准测试和排除故障。
如下图所示:
语法:dstat[-afv] [options..] [delay [count]]
常用选项:
-c:显示cpu相关信息 -C #,#,...,total -d,--disk: 显示磁盘相关信息 -D total,sda,sdb,... -g:显示page相关统计数据; -m: 显示memory相关统计数据; -n: 显示network相关统计数据; -p: 显示process相关统计数据; -r: 显示io请求相关的统计数据; -s: 显示swapped相关的统计数据; --tcp --udp --unix --raw --socket --ipc --top-cpu:显示最占用CPU的进程; --top-io: 显示最占用io的进程; --top-mem: 显示最占用内存的进程; --top-latency: 显示延迟最大的进程
使用参考:
https://linux.cn/article-3215-1.html
八、进程管理工具
以上都是一些进程的查看、进程资源的获取等命令,接下来是进程的管理,所谓进程的管理就是向进程发送一些控制信号,来完成对进程的管理控制。
Kill命令
显示当前系统的信号,以及向进程发送信号指令,以实现对进程的管理。
1.kill -l [signal]
显示当前系统可用信号(或者使用man 7 signal)
如下:
[root@CentOS6 ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@CentOS6 ~]# kill -l 1 HUP
2.每个信号的表示方法有三种:
1)信号的数字标识;如 1
2)信号的完整名称;如 SIGHUB
3)信号的简写名称;如 HUB
3.向进程发送信号:
kill [-s signal|-SINGAL]pid…
[root@CentOS6 ~]# ps aux |grep httpd root 7654 0.0 0.3 186052 3920 ? Ss 06:02 0:00 /usr/sbin/httpd apache 7658 0.0 0.2 186052 2516 ? S 06:02 0:00 /usr/sbin/httpd apache 7659 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7660 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7661 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7662 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7663 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7664 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd root 7697 0.0 0.0 103316 844 pts/0 S+ 06:06 0:00 grep --color=auto httpd [root@CentOS6 ~]# kill -s 15 7660 [root@CentOS6 ~]# ps aux |grep httpd root 7654 0.0 0.3 186052 3920 ? Ss 06:02 0:00 /usr/sbin/httpd apache 7658 0.0 0.2 186052 2516 ? S 06:02 0:00 /usr/sbin/httpd apache 7659 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7661 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7662 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7663 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd apache 7664 0.0 0.2 186052 2500 ? S 06:02 0:00 /usr/sbin/httpd root 7700 0.0 0.0 103316 848 pts/0 S+ 06:06 0:00 grep --color=auto httpd
4.常用的信号:
-
SIGHUP,1: 无须重新启动进程而让其重读配置文件,并生效;
-
SIGINT,2: 打断正在运行的进程;相当于Ctrl+c;
-
SIGKILL,9: 强行终止(杀死)正在运行的进程;
-
SIGTERM,15:安全终止正在运行的进程;
-
SIGCONT,18:继续运行指定的进程;
-
SIGSTOP,19:暂停进程;
killall命令
杀死所有的进程
killall [-SIGNAL] program
[root@CentOS6 ~]# killall httpd [root@CentOS6 ~]# ps aux |grep httpd root 7759 0.0 0.0 103316 848 pts/0 S+ 06:30 0:00 grep --color=auto httpd
第二篇:作业管理(job control)
Linux的作业控制
1.job:
前台作业(foreground):通过终端启动,且启动后一直占据终端;
后台作业(background):可通过终端启动,但启动后即转入后台运行(释放终端)
2.如何让作业运行于后台?
(1) 运行中的作业:
Ctrl+z
注意:送往后台后,作业会转为停止态;
(2) 尚未启动的作业:
# COMMAND &
注意:
◎此类作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。 ◎如果希望送往后台后,剥离与终端的关系:
# nohup COMMAND &
3.查看所有作业:
# jobs
[root@centos7 ~]# jobs [1]- Stopped ping 10.1.252.153 [2]+ Stopped vim /tmp/abc.txt
4.作业控制:
# fg[[%]JOB_NUM]:把指定的后台作业调回前台;
# bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行;
# kill [%JOB_NUM]:终止指定的作业;(百分号和作业号是不可以省略的)
示例:
[root@CentOS6 ~]# jobs [1]- Stopped ping 10.1.252.161 [2]+ Stopped htop [root@CentOS6 ~]# kill %1 [1]- Stopped ping 10.1.252.161 [root@CentOS6 ~]# jobs [1]- Terminated ping 10.1.252.161 [2]+ Stopped htop [root@CentOS6 ~]# jobs [2]+ Stopped htop
5.进程优先级
-
可通过nice值调整的优先级范围:100-139;
-
nice值分别对应于:-20,19;
-
进程启动时默认的nice值为0,优先级为120;
-
只有根用户才能降低nice值(提高优先性);
调整进程的nice值的方法:
1)对于尚未启动的进程
# nice -n N COMMAND :N表示nice值,范围 -20~19;
仅管理员可调低nice值
2)对于已经启动并处于运行中进程的nice值
# renice [-n] N PID
3)查看nice值和优先级
# ps axo pid,comm,ni,priority
示例:
[root@CentOS6 ~]# nice -n -5 htop [root@CentOS6 ~]# ps axo pid,comm,ni,priority |grep htop 8275 htop -5 15 [root@CentOS6 ~]# renice -n -3 8275 8275: old priority -5, new priority -3 [root@CentOS6 ~]# ps axo pid,comm,ni,priority |grep htop 8275 htop -3 17
原创文章,作者:zhumengxiaotao,如若转载,请注明出处:http://www.178linux.com/45616