1、进程
进程的管理是内核的重要功能之一,了解和熟练的完成进程管理是系统安全、性能效率优化的基础。
1.1、进程的性能及功能
内核的功用: 进程管理、文件系统、网络功能、内存管理、驱动程序、 安 全功能等。
进程的性质:
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合进程ID(Process ID,PID)号码被用来标记各个进程 UID、 GID、和SELinux语境决定对文件系统的存取和访问权限; 通常从执行进程的用户来继承; 存在生命周期。
1.2、进程的创建
进程创建: init:第一个进程;上帝进程。 进程之间存在父子关系。 进程: 都由其父进程创建,CoW(写时复制); fork(), clone()
1.3、进程的基本状态与切换
进程的基本状态:
创建状态: 进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信 息,完成资源分配。如果创建工作无法完成,比如资源无法满 足,就无法被调度运行,把此时进程所处状态称为创建状态; 就绪状态: 进程已经准备好,已分配到所需资源,只要分配到 CPU就能够立即运行; 执行状态:进程处于就绪状态被调度后,进程进入执行状态; 阻塞状态: 正在执行的进程由于某些事件(I/O请求,申请缓 存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进 入就绪状态等待系统调用; 终止状态: 进程结束,或出现错误,或被系统终止,进入终止 状态。无法再执行;
1.4、进程优先级
系统优先级: 数字越小,优先级越高; 0-139(CentOS4,5):各有140个运行队列和过期队列; 0-98,99(CentOS6); 实时优先级: 99-0 值最大优先级最高; nice值:-20到19,对应系统优先级100-139或99; Big O:时间复杂度,用时和规模的关系 O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
2、系统管理工具
Linux系统状态的查看及管理工具: pstree, ps, pidof,pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
2.1、pstree命令
pstree - display a tree of processes
[root@rootdns ~]$pstree init─┬─abrtd ├─acpid ├─atd ├─auditd───{auditd} [root@rootdns ~]$pstree -p init(1)─┬─abrtd(2237) ├─acpid(1698) ├─atd(2279) ├─auditd(1586)───{auditd}(1587) ├─console-kit-dae(2310)─┬─{console-kit-da}(2311) │ ├─{console-kit-da}(2312)
2.2、ps命令
ps: process state; ps - report a snapshot of the current processes;
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中;
ps [OPTION]... 支持三种选项: UNIX选项 如-A -e BSD选项 如a GNU选项 如--help
常用选项:
选项:默认显示当前终端中的进程 • a 选项包括所有终端中的进程 • x 选项包括不链接终端的进程 • u 选项显示进程所有者的信息 • f 选项显示进程树,相当于 --forest • k|--sort 属性 对属性排序,属性前加- 表示倒序 • o 属性… 选项显示定制的信息 pid、 cmd、 %cpu、 %mem • L 显示支持的属性列表
-C cmdlist 指定命令,多个命令用,分隔 -L 显示线程 -e: 显示所有进程,相当于-A -f: 显示完整格式程序信息 -F: 显示更完整格式的进程信息 -H: 以进程层级格式显示进程相关信息 -u userlist 指定有效的用户ID或名称 -U userlist 指定真正的用户ID或名称 -g gid或groupname 指定有效的gid或组名称 -G gid或groupname 指定真正的gid或组名称 -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,会话(子进程)发起者 ni: nice值 pri: priority 优先级 psr: processor CPU编号 rtprio: 实时优先级
示例: ps axo pid,cmd,psr,ni,pri,rtprio
常用组合: aux -ef -eFH -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
2.2.1、示例
查询你拥有的所有进程: ps -x 显示指定用户名(RUID)或用户ID的进程: ps -fU apache ps -fu 48 显示指定用户名(EUID)或用户ID的进程: ps -fu wang ps -fu 1000 查看以root用户权限(实际和有效ID)运行的每个进程: ps -U root -u root 列出某个组拥有的所有进程(实际组ID:RGID或名称): ps -fG nginx 列出有效组名称(或会话)所拥有的所有进程: ps -fg mysql ps -fG 27 通过进程ID来显示所属的进程: ps -fp 1234 以父进程ID来显示其下所有的进程,如显示父进程为1154的 所有进程: ps -f --ppid 1234 显示指定PID的多个进程: ps -fp 1204,1239,1263 要按tty显示所属进程: ps -ft pst/0 以进程树显示系统中的进程如何相互链接: ps -e --forest 以进程树显示指定的进程 ps -f --forest -C sshd ps -ef --forest | grep -v grep | grep sshd 要显示一个进程的所有线程,将显示LWP(轻量级进程)以及 NLWP(轻量级进程数)列: ps -fL -C nginx 要列出所有格式说明符: ps L 查看进程的PID,PPID,用户名和命令: ps -eo pid,ppid,user,cmd 自定义格式显示文件系统组,ni值开始时间和进程的时间: ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime 使用其PID查找进程名称: ps -p 1244 -o comm= 要以其名称选择特定进程,显示其所有子进程 ps -C sshd,bash 查找指定进程名所有的所属PID,在编写需要从std输出或文 件读取PID的脚本时这个参数很有用: ps -C httpd,sshd -o pid= 检查一个进程的执行时间 ps -eo comm,etime,user | grep nginx 查找占用最多内存和CPU的进程: ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head 显示安全信息: ps -eM ps --context 使用以下命令以用户定义的格式显示安全信息。 ps -eo euser,ruser,suser,fuser,f,comm,label 使用watch实用程序执行重复的输出以实现对就程进行实时的 监视,如下面的命令显示每秒钟的监视: watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=- %mem | head'
2.2.2、进程优先级
进程优先级调整: 静态优先级:100-139 进程默认启动时的nice值为0,优先级为120 只有根用户才能降低nice值(提高优先性)
nice命令: nice [OPTION] [COMMAND [ARG]...] renice命令: renice [-n] priority pid... 查看: ps axo pid,comm,ni
2.2.3、搜索进程
最灵活:ps 选项 | 其它命令 按预定义的模式:pgrep pgrep [options] pattern -u uid: effective user,生效者 -U uid: real user,真正发起运行命令者 -t terminal: 与指定终端相关的进程 -l: 显示进程名 -a: 显示完整格式的进程名 -P pid: 显示指定进程的子进程 按确切的程序名称:/sbin/pidof pidof bash
2.3、系统工具uptime
显示当前时间,系统已启动的时间、当前上线人数,系统平 均负载(1、 5、 10分钟的平均负载,一般不会超过1)
系统平均负载: 指在特定时间间隔内运行队列中的平均进程数; 通常每个CPU内核的当前活动进程数不大于3,那么系统 的性能良好。 如果每个CPU内核的任务数大于5,那么此 主机的性能有严重问题; 如果linux主机是1个双核CPU,当Load Average 为6的 时候说明机器已经被充分使用;
[root@rootdns ~]$uptime 14:30:06 up 4:32, 3 users, load average: 0.00, 0.00, 0.00
2.4、进程管理工具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:虚拟机偷走的时间
选项: -d #: 指定刷新时间间隔,默认为3秒 -b: 全部显示所有进程 -n #: 刷新多少次后退出
[root@rootdns ~]$top top - 14:30:37 up 4:32, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 157 total, 1 running, 156 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1004112k total, 597308k used, 406804k free, 88384k buffers Swap: 1048572k total, 0k used, 1048572k free, 206356k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2107 mysql 20 0 988m 161m 5384 S 0.3 16.5 0:16.95 mysqld 3210 root 20 0 15036 1272 944 R 0.3 0.1 0:00.01 top 1 root 20 0 19348 1556 1236 S 0.0 0.2 0:01.52 init
扩展: htop命令:EPEL源 选项: -d #: 指定延迟时间; -u UserName: 仅显示指定用户的进程 -s COLUME: 以指定字段进行排序 子命令: s: 跟踪选定进程的系统调用 l: 显示选定进程打开的文件列表 a:将选定的进程绑定至某指定CPU核心 t: 显示进程树
2.5、vmstat命令
虚拟内存信息 vmstat [options] [delay [count]] vmstat 2 5
procs: r:可运行(正运行或等待运行)进程的个数,和核心数有关 b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) memory: swpd: 交换内存的使用总量 free:空闲物理内存总量 buffer:用于buffer的内存总量 cache:用于cache的内存总量 swap: si:从磁盘交换进内存的数据速率(kb/s) so:从内存交换至磁盘的数据速率(kb/s)
io: bi:从块设备读入数据到系统的速率(kb/s) bo: 保存数据至块设备的速率 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.
选项: -s: 显示内存的统计数据
[root@rootdns ~]$vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 406804 88384 206392 0 0 4 1 10 14 0 0 100 0 0
[root@rootdns ~]$vmstat -s 1004112 total memory 595632 used memory 336248 active memory 147916 inactive memory 408480 free memory 88384 buffer memory 206428 swap cache 1048572 total swap
2.6、iostat命令
iostat:统计CPU和设备IO信息
示例:iostat 1 10
[root@rootdns ~]$iostat Linux 2.6.32-696.el6.x86_64 (rootdns) 01/21/2018 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.00 0.06 0.17 0.00 99.76 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.66 29.84 9.79 536260 175890 scd0 0.01 0.64 0.00 11488 0 dm-0 0.06 0.96 0.05 17298 848
2.7、pmap命令
pmap命令:进程对应的内存映射; pmap [options] pid [...] -x: 显示详细格式的信息 示例:pmap 1 另外一种实现: cat /proc/PID/maps
[root@rootdns ~]$pmap 1797 1797: /usr/sbin/sshd 00007f286e56c000 52K r-x-- /lib64/libnss_files-2.12.so 00007f286e579000 2044K ----- /lib64/libnss_files-2.12.so 00007f286e778000 4K r---- /lib64/libnss_files-2.12.so 00007f286e779000 4K rw--- /lib64/libnss_files-2.12.so 00007f286e77a000 28K r-x-- /lib64/librt-2.12.so 00007f286e781000 2044K ----- /lib64/librt-2.12.so
[root@rootdns ~]$pmap -x 1797 1797: /usr/sbin/sshd Address Kbytes RSS Dirty Mode Mapping 00007f286e56c000 52 0 0 r-x-- libnss_files-2.12.so 00007f286e579000 2044 0 0 ----- libnss_files-2.12.so 00007f286e778000 4 4 4 r---- libnss_files-2.12.so 00007f286e779000 4 4 4 rw--- libnss_files-2.12.so 00007f286e77a000 28 0 0 r-x-- librt-2.12.so 00007f286e781000 2044 0 0 ----- librt-2.12.so
2.8、glances命令
EPEL源
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-Ppassword] [--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 q Quit (Esc and Ctrl-C also work) y Show/hide hddtemp stats
常用选项: -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.9、dstat命令
:系统资源统计,代替vmstat,iostat 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: 显示延迟最大的进程
2.10、iotop
iotop命令是一个用来监视磁盘I/O使用状况的top类工具。
iotop具有与top相似的UI,其中包括PID、用户、 I/O、进程
等相关信息。可查看每个进程是如何使用IO
交互按键: left和right方向键:改变排序 r:反向排序 o:切换至选项--only p:切换至--processes选项 a:切换至--accumulated选项 q:退出。 i:改变线程的优先级
[root@rootdns ~]$iotop Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [stopper/0] 6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] 8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [stopper/1] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] 10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
2.11、kill命令
向进程发送控制信号,以实现对进程管理,每个信号对应一个数字, 信号名称以SIG开头(可省略),不区分大小写; 显示当前系统可用信号: kill –l,trap -l 常用信号:man 7 signal
[root@rootdns ~]$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
指定信号的方法: (1) 信号的数字标识:1, 2, 9 (2) 信号完整名称:SIGHUP (3) 信号的简写名称:HUP
按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: 显示指定进程的子进程
3、任务计划
Linux任务计划、周期性任务执行未来的某时间点执行一次任务; at:一次性任务计划; batch:系统自行选择空闲时间去执行此处指定的任务周期性运行某任务; cron:系统计划任务,或者用户任务计划;
3.1、at
包:at at命令:at [option] TIME 常用选项: -V 显示版本信息: -l: 列出指定队列中等待运行的作业;相当于atq -d: 删除指定的作业;相当于atrm -c: 查看具体作业任务 -f /path/from/somefile:从指定的文件中读取任务 -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
执行方式: 1)交互式 2)输入重定向 3)at –f 文件
依赖与atd服务,需要启动才能实现at任务;at队列存放在/var/spool/at目录中
/etc/at.{allow,deny}控制用户是否能执行at任务: 白名单:/etc/at.allow 默认不存在,只有该文件中的用户 才能执行at命令; 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行 at命令,而没有在at.deny 文件中的使用者则可执行; 如果两个文件都不存在,只有 root 可以执行 at 命令
3.2、cron
周期性任务计划:cron
相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具; cronie-anacron: cronie的补充程序,用于监控cronie任务执行状况, 如cronie中的任务在过去该运行的时间点未能正常 运行,则anacron会随后启动一次此任务; crontabs:包含CentOS提供系统维护任务
确保crond守护处于运行状态: CentOS 7: systemctl status crond CentOS 6: service crond status 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业 /etc/crontab 用户cron任务: crontab命令 日志:/var/log/cron
详情参见 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 * * * centos /bin/echo "Howdy!" @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 * * * *
系统的计划任务: /etc/crontab /etc/cron.d/ 配置文件 /etc/cron.hourly/ 脚本 /etc/cron.daily/ 脚本 /etc/cron.weekly/ 脚本 /etc/cron.monthly/脚本
转载于:https://blog.51cto.com/mjunetwslinux/2067441