@wyjgd
2019-09-18T08:54:15.000000Z
字数 4749
阅读 668
1、内核的功能:
进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
2、Process:
运行中的程序的一个副本,被载入内存的一个指令集合,进程ID(PID)被用来标记各个进程。
UID、GID和selinux决定对文件系统的存取和访问权限,通常从执行进程的用户来继承,存在生命周期。
task struct:linux内核存储进程信息的数据结构模式。
task list:多个任务的task struct组成的链表
进程创建:init(第一个进程)
进程:由父进程创建,父子关系,CoW,fork(),clone()
3、进程状态
进程类型:守护进程(daemon)在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
两者可相互转化
运行态:running
就绪:ready
睡眠状态可中断:interruptable
睡眠状态不可终端:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
us:用户空间
sy:系统空间
ni:调整(nice)优先级
id:空闲(idle)空间
wa:等待IO时间
hi:硬中断
si:软中断
st:虚拟机偷走时间
PR:top命令自己的优先级(值越大,优先级越低)
VIRT:虚拟内存
RES:物理内存
SHR:共享内存
load average:1 5 15的平均负载情况
top有许多内置命令
排序:
P:占据的CPU百分比
M:占据的内存百分比
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l
tasks及cpu信息:t
cpu分别显示:1(数字)
memory信息:m
退出q
修改刷新时间间隔s
终止指定进程k
用法:ps [OPTION]...
支持三种选项:
UNIX选项 如-A -e
BSD选项 如a
GNU选项 如--help
选项:默认显示当前终端中的进程
a 选项包括所有终端中的进程
x 选项包括不链接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程树,相当于 --forest
k|--sort 属性 对属性排序,属性前加- 表示倒序
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
L 显示支持的属性列表
-L 显示线程
-e: 显示所有进程,相当于-A
-f: 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
-p pid 显示指pid的进程
--ppid pid 显示属于pid的子进程
-M 显示SELinux信息,相当于Z
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSident Size, 常驻内存集
STAT:进程状态
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者
查找前10个占用内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -10
iostat用于输出CPU和磁盘输入输出、分区、网络文件系统NFS相关的统计信息。监控系统设备的输入/输出情况,并生成报告,以便根据统计报告修改系统配置,获取更优的性能。
用法:
iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
iostat[参数][时间][次数]
其中,时间以秒为单位。
1、iostat 命令的简单使用
iostat 命令可以显示 CPU 和 I/O 系统的负载情况及分区状态信息。
直接执行 iostat 命令可以显示下面的内容:
[root@master3 ~]# iostat
Linux 3.10.0-957.el7.x86_64 (master3) 09/18/2019 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.02 0.00 0.62 0.03 0.00 98.33
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.23 2.30 11.52 1237068 6186048
sdb 0.00 0.01 0.00 7197 2104
sdc 0.00 0.02 0.00 10688 1156
dm-0 0.25 2.24 11.51 1202784 6182933
dm-1 0.00 0.01 0.00 2972 0
dm-2 0.00 0.00 0.00 1696 2188
各输出项的含义如下:
avg-cpu段:
%user:在用户级别运行所使用 CPU 的百分比。
%nice:nice操作所使用 CPU 的百分比。
%system:在系统级别(kernel)运行所使用 CPU 的百分比。
%iowait:CPU等待硬件 I/O 时,所占用 CPU 百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU 空闲时间的百分比。
Device段:
tps:设备每秒的 I/O 请求数,多个逻辑请求可能会被合并为“一次I/O请求”。
Blk_read/s:每秒读取的 block 数
Blk_wrtn/s:每秒写入的 block 数
Blk_read:读入的 block 总数
Blk_wrtn:写入的 block 总数
wrqm/s 将写入请求合并后,每秒发送到设备的写入请求数。
2、选项
-c 仅显示 CPU 统计信息。与 -d 选项互斥
-d 仅显示磁盘统计信息。与 -c 选项互斥
-k 以 KB为单位显示每秒的磁盘请求数,默认单位块
-m 以MB为单位显示每秒的磁盘请求数
-N 显示磁盘阵列信息
-n 显示网络文件系统NFS报告。此选项仅适用于Linux内核2.6.17以上版本。
-p device | ALL
与 -x 选项互斥,用于显示块设备及系统分区的统计信息,也可以在 -p 后指定一个设备名,如:iostat -p hda 或显示所有设备iostat -p ALL
-t 在输出数据时,打印收集数据的时间
-V 打印版本号和帮助信息
-x 输出扩展信息。、
vmstat 是除 top 之外另一个常用的系统检测工具
[root@master3 ~]# vmstat 1 5
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 1610272 308 1491924 0 0 1 3 20 5 1 1 98 0 0
0 0 0 1609852 308 1491924 0 0 0 0 2476 3270 5 3 92 0 0
0 0 0 1609884 308 1491924 0 0 0 0 2506 3250 5 3 92 0 0
0 0 0 1609976 308 1491924 0 0 0 0 2306 2812 5 4 92 0 0
0 0 0 1609812 308 1491924 0 0 0 0 2318 3163 5 3 93 0 0
kill:向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头,不区分大小写
当前系统可用信号:kill -l或trap -l
常用信号:man 7 signal
SIGHUP(1) 无须关闭进程而让其重读配置文件
SIGINT(2) 中止正在运行的进程,相当于Ctrl+c
SIGQUIT(3)相当于Crtl+\
SIGKILL(9)强制杀死正在运行的进程
SIGTERM(15)终止正在运行的进程
SIGCONT(18)继续运行
SIGSTOP(19)后台休眠
按PID:kill [-SIGNAL] pid …
kill –n SIGNAL pid
kill –s SIGNAL pid
按名称:killall [-SIGNAL] comm…
按模式:pkill [options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程
计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
/etc/crontab
用户cron任务:crontab命令
日志:/var/log/cron
系统cron任务:/etc/crontab
注释行以 # 开头
详情参见 man 5 crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
例如:晚上9点10分运行echo命令
10 21 * * * root /bin/echo "6666"
@reboot Run once after reboot
@yearly 0 0 1 1 * 每一年
@annually 0 0 1 1 * 每一年
@monthly 0 0 1 * * 每个月
@weekly 0 0 * * 0 每个星期
@daily 0 0 * * * 每天
@hourly 0 * * * * 每小时
crontab命令
每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
用法:
crontab [-u user] [-l | -r | -e] [-i]
-l 列出所有任务
-e 编辑任务
-r 移除所有任务
-i 同-r一同使用,以交互式模式移除指定任务
-u user 仅root可运行,指定用户管理cron任务
控制用户执行计划任务:/etc/cron.{allow,deny}
crontab实现,root用户在12个月内, 每天的早上6点到12点,每隔3个小时0 分钟执行一次 /usr/bin/backup
crontab -e -u root
0 6-12/3 * 12 * /usr/bin/backup