先说一下内核的功用:
-
进程管理
-
文件系统
-
网络功能
-
内存管理
-
驱动程序
-
安全功能等
Process :运行中的程序的一个副本,是被载入内存的一个指令集合
-
进程ID ( Process ID,PID ) 号码被用来标记各个进程
-
UID,GID和SELinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承
-
存在生命周期
task struct :Linux 内核存储进程消息的数据结构格式
task list :多个任务的task struct组成的链表
进程的创建:
init:第一个进程
进程都是由其父进程创建,CoW ; fork() ;clone();
进程的优先级:
系统优先级:数字越小,优先级越高
centos4,5 : 0-139 :各有140个运行队列和过期队列
centos6 : 0-98,99
实时优先级 :99-0 : 值越大优先级越高
Nice值 :-20 到 19 :对应系统优先级100-139或99
Big O :时间复杂度,用时和规模的关系,时间复杂度越小越好
O(1);O(logn);O(n)线性;O(n^2)抛物线;O(2^n)
进程的相关概念:
-
进程内存:
Page Frame :页框,用来存储页面数据,存储页面大小为4k
LRU :Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间
MMU :Memory Management Unit 负责转换线性和物理地址
-
Linux内核: 抢占式多任务
-
进程类型:
守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程: 跟终端相关,通过终端启动的进程
注意: 两者可以相互转化
-
进程状态:
运行状态: running
就绪状态: ready
睡眠状态:
可中断: interruptable
不可中断: uninterruptable
停止状态: stopped,暂停于内存中,但不会被调度,除非手动启动
僵死状态: zombie,结束进程,父进程结束前,子进程不关闭
-
进程的分类:
CPU-Bound: CPU密集型,非交互式
IO-Bound: IO密集型,交互式
-
Linux系统状态的查看及管理工具
pstree;ps;pidof;pgrep;top;htop;glance;pmap;vmstat;dstat;kill;pkill;jobs;bg;fg;nohup
一些进程管理命令:
pstree 命令: 进程以树的形状显示
ps :process state ;report a snapshot of the current processes
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
ps可以用来查看进程信息
ps [OPTION]...
支持三种选项:
UNIX选项 如-A -e
BSD选项 如a
GUN选项 如--help
• 默认显示当前终端中的进程
• a 选项包括所有终端中的进程
• x 选项包括不链接终端的进程
• u 选项显示进程所有者的信息
• f 选项显示进程的父进程
• o 属性… 选项显示定制的信息:
pid、comm、%cpu、%mem、state、tty、euser、ruser
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSident Size, 常驻内存集
STAT:进程状态:
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者
常用组合: -ef
-e :显示所有进程
-f :显示完整格式程序信息
常用组合: -eFH
-F :显示更完整格式的进程信息
-H :以进程层级格式显示进程相关信息
常用组合: 自定义显示
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
ni : nice的值
pri : priority 优先级
psr : processor ,CPU 编号
rtprio : 实时优先级
搜索进程
最灵活: ps [OPTION] | COMMAND
pgrep命令 :搜索进程
pgrep [options] pattern
-
-u uid :effective user,生效者
-
-U uid :real user,真正发起运行命令者
-
-t terminal :与指定终端相关的进程
-
-l :显示进程名
-
-a :显示完整格式的进程名
-
-P pid :显示指定进程的子进程
按确切的程序名称 :/sbin/pidof
pidof COMMAND #pidof bash
uptime 命令
显示当前时间,系统已启动的时间,当前上线人数,系统平均负载(1,5,10分钟的平均负载,一般不会超过1)
系统平均负载: 指在特定时间间隔内运行队列中的平均进程数
如果每个CPU内核的当前活动进程数不大于3个的话,那么系统的性能良好,如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题
如果Linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了
top 命令:
top中有许多内置命令:
排序:
P :以占据的CPU百分比,%CPU
M :占据内存百分比,%MEM
T :累积占据CPU时长,TIME+
首部信息显示:
uptime信息: l 命令
tasks及cpu信息: t 命令
cpu分别显示: 1(数字)
memory信息: m 命令
退出命令: q
修改刷新时间间隔,默认三秒: s
终止指定进程: k
保存文件: W
上图框框标记的栏位信息简介:
-
us :用户空间
-
sy :内核空间
-
ni :调整nice时间
-
id :空闲
-
wa :等待IO时间
-
hi :硬中断
-
si :软中断(模式切换)
-
st :虚拟机偷走的时间
\
上图框框内栏位信息简介:
f命令可以显示,man top 能够显示更加详细的信息
-
PID (Process Id):任务的进程ID
-
PPID (Parent Process Pid):父任务的进程ID
-
RUSER (Real User Name):任务的所有者真实名称
-
UID (User Id):任务所有者ID
-
USER (User Name):任务所有者名称
-
GROUP (Group Name):任务所有者群组名
-
TTY (Controlling Tty):终端
-
PR (Priority):优先级
-
%CPU (CPU usage):CPU使用率
-
%MEM (Memory usage (RES)):内存使用率
-
S (Process Status):进程状态
-
TIME+ (CPU Time, hundredths):CPU时间,精确到秒
选项:
-d # : 指定刷新时间间隔,默认为3秒
-b :以批次方式
-n # :显示多少批次
htop 命令:需要从EPEL源安装
选项:
-d # :指定延迟时间
-u UserName :仅显示指定用户的进程
-s COLUME :以指定字段进行排序
子命令:
s :跟踪选定进程的系统调用
l :显示选定进程打开的文件列表
a :将选定的进程绑定至某指定CPU核心
t :显示进程树
自带有帮助,是top命令的升级版
内存工具:
vmstat命令: 虚拟内存信息
vmstat [options] [delay [count]]
vmstat 2 5 #每两秒显示一次,共显示5次
上图栏目信息简介:
procs :
r :等待运行的进程的个数,和核心数有关
b :处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory :
swpd : 交换内存的使用总量
free : 空闲物理内存的总量
buffer :用于buffer的内存总量
cache :用于cache的内存总量
swap :
si :从磁盘交换进内存的数据速率(kb/s)
so :从内存交换至磁盘的数据速率(kb/s)
io :
bi :从块设备读入数据到系统的速率(kb/s)
bo :保存数据至块设备的速率(kb/s)
system :
in :interrupts ,中断速率,包括时钟
cs :context switch ,进程切换速率
cpu :
us:Time spent running non-kernel code
sy: Time spent running kernel code
id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO. 2.5.41前,包括in idle.
st: Time stolen from a virtual machine. 2.6.11前, unknown.
vmstat -s :显示内存的统计数据
pmap 命令:显示进程对应的内存映射
pmap [options] pid [...]
-x :显示详细格式的信息
pmap 1 或 cat /proc/PID/maps #查看进程PID为1的内存映射关系
glances 命令,需要从EPEL源安装
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
a Sort processes automatically l Show/hide logs
c Sort processes by CPU% b Bytes or bits for network I/O
m Sort processes by MEM% w Delete warning logs
p Sort processes by name x Delete warning and critical logs
i Sort processes by I/O rate 1 Global CPU or per-CPU stats
d Show/hide disk I/O stats h Show/hide this help screen
f Show/hide file system stats t View network I/O as combination
n Show/hide network stats u View cumulative network I/O
s Show/hide sensors stats z Show/hide processes list
y Show/hide hddtemp stats q Quit (Esc and Ctrl-C also work)
常用选项:
-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 :要连入的服务器端地址
dstat 命令: 系统资源统计
Usage: dstat [-afv] [options..] [delay [count]]
Versatile tool for generating system resource statistics
options:
-c :显示cpu相关信息
-d :显示disk相关信息
-g :显示page相关统计数据
-m :显示memory相关统计数据
-n :显示network相关统计数据
-p :显示process相关统计数据
-r :显示IO请求相关的统计数据
-s :显示swapped相关的统计数据
--tcp :显示tcp数据包数据
--udp
--unix
--raw
--socket
--ipc
--top-cpu :显示最占用CPU的进程
--top-io :显示最占用IO的进程
--top-mem :显示最占用内存的进程
--top-latency :显示延迟最大的进程
kill 命令
向进程发送控制信号,以实现对进程的管理
显示当前系统可以信号 : kill -l
常用的信号 : man 7 signal
1)SINGHUP :无须关闭进程而让其重读配置文件
2)SIGINT :终止正在运行的进程;相当于 ctrl+c
9)SIGKILL :杀死正在运行的进程
15)SIGTERM :终止正在运行的进程
18)SIGCONT :继续运行
19)SIGSTOP :后台休眠
指定信号的方法;
(1)信号的数字标识: 1 ,2 ,9
(2)信号完整名称 :SIGHUP
(3)信号的简写名称 :HUP
命令方式:
按PID : kill [-SIGNAL] pid ...
按名称 : killall [-SIGNAL] command
按模式 : pkill [options] pattern
-SIGNAL
-u uid :effective user ,生效者
-U uid :real user ,真正发起运行命令者
-t terminal :与指定终端相关的进程
-l :显示进程名
-a :显示完整格式的进程名
-P pid :显示父进程为此处指定的进程的进程列表