本文共 7576 字,大约阅读时间需要 25 分钟。
进程是程序运行的一个副本,存在生命周期,cpu按照时间分配每个进程运行,还未结束的进程将保存在内存存储的固定格式中(task struct),多个任务的task struct组成的链表称task list。我们用指令查看的结果其实就是保存在task list中的数据,进程间的数据通过cow写时复制实现数据独立。
进程内存分配,一个4G内存机器,内核会把物理内存用Page Frame形式分配给每个进程,最大3G,所以,每个进程都一位自己是除了内核唯一的进程,进程中的数据分为两大类。
进程状态 :
ps有3种显示风格
UNIX风格,选项带一个 -BSD风格 选项不带 -GNU 带两个-的长选项常用选项
a:所有与终端相关的进程;
x:所有与终端无关的进程;u:以用户为中心组织进程状态信息显示;
[root@node1 ~]# ps axuUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.3 193700 6848 ? Ss 12:28 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21USERPID%CPU cputime/realtime cpu使用时间 除 进程累计运行时间%MEM 占整个内存比率VSZ 虚拟内存集 虚拟内存集中可能包含很多共享库 单位是kbRSS 常驻内存集 (resident set size, the non-swapped physical memory that a task has used (in kiloBytes).(alias rssize, rsz).)单位是kbSTAT R:running S:interruptable sleeping D:uninterruptable sleeping T:Stopped Z:zombie +:前台进程 l:多线程进程 N:低优先级进程 <:高优先级进程 s:session leader TIME 累计cpu使用时间
常用选项
-e:显示所有进程
-f:显示完整格式的进程信息-F:显示完整格式的进程信息;C: cpu utilization cputime/realtime cpu使用时间 除 进程累计运行时间PSR:运行于哪颗CPU之上-H:以层级结构显示进程的相关信息;
[root@node1 ~]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:28 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21root 2 0 0 12:28 ? 00:00:00 [kthreadd]UIDPIDPPID 父pidC cputime/realtime cpu使用时间 除 进程累计运行时间STIME 启动时间TTY 相关终端TIME cpu累计时间CMD
自定义选项,o field1, field2,...,个人觉得非常好用
常用自定义字段uid
unamegroupfuid filesystem access user IDfusergid%cpu pcpu%mem pmem psr processor that process is currently assigned to 运行于哪颗CPU之上pidppidttyrtprio realtime priority 实时优先级 越大优先级越高 priority 用户优先级 (pri不一样算法)ni nice nice value. This ranges from 19 (nicest) to -20 (not nice to others)vsz vsize 虚拟内存rss rssize rsz 常驻内存s stat 状态start 命令开始时间args cmd command
[root@node1 ~]# ps axo uname,pid,ppid,tty,pcpu,pmem,rtprio,priority,ni,vsz,rsz,s,start,cmd,priUSER PID PPID TT %CPU %MEM RTPRIO PRI NI VSZ RSZ S STARTED CMD PRIroot 1 0 ? 0.0 0.3 - 20 0 193700 6848 S 12:57:49 /usr/lib/systemd/systemd -- 19
top - display Linux processes
top - 01:51:36 up 13:22, 3 users, load average: 0.00,0.01,0.05 当前时间 运行时常 3个用户 平均负载 过去1分钟、5分钟和15分钟的平均负载;cpu*(0-0.7表示顺畅 1满负载 5将近死机)Tasks: 112 total, 2 running, 110 sleeping, 0 stopped, 0 zombie 总共多少进程 2个在跑 110在睡眠 0个停止 0个僵死%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 用户空间占用百分比 内核占用 用户进程改变过优先级的进程占用 空闲idle 等待(io) 硬件中断hardware interrupt 软件中断 被偷走stealKiB Mem : 1867048 total, 1383244 free, 166956 used, 316848 buff/cache 内存 总空间 空闲空间 使用 可回收buffer待写入 cache读取缓存KiB Swap: 2097148 total, 2097148 free, 0 used. 1501796 avail Mem 交换分区 PID USER PR优先级 NI VIRT虚拟内存集 RES常驻内存 SHR共享内存 S %CPU %MEM TIME+(cpu累计占用时间) COMMAND 607 root 20 0 305100 6168 4800 S 0.3 0.3 0:48.91 vmtoolsd
交互
M 根据内存排序 T cpu累计占用时间 time排序P:以占据CPU百分比排序;首部信息: uptime信息:l命令 tasks及cpu信息:t命令 1 分别显示每个cpu 内存信息:m命令修改刷新时间间隔:s终止指定的进程:k退出命令:q
说完top,在介绍一款升级版top htop,相比top,htop提供更多的鼠标方便操作,更直观的可视化。
[root@node1 yum.repos.d]# yum install htop
帮助说明
/ search
p 详细/简洁 程序路径 t 树状显示 可查看进程关系u 根据user筛选K 显示/隐藏 内核线程 而在top是显示的H 显示/隐藏 用户线程F 光标跟踪程序P 根据cpu排序 M 根据内存排序 T根据cpu占时间排序I 逆序自定义字段排序space 下一个经常K 结束进程a 绑定进程在哪个cpul 显示进程打开的文件 s 查看当前进程发起的系统调用i 涉及优先级] 增加优先级[ 减少优先级选项:
-d #:指定延迟时间间隔;-u UserName:仅显示指定用户的进程;-s COLUME:以指定字段进行排序;子命令:l:显示选定的进程打开的文件列表;s:跟踪选定的进程的系统调用;t:以层级关系显示各进程状态;a:将选定的进程绑定至某指定的CPU核心;
versatile tool for generating system resource statistics,非常强大系统监测工具
安装[root@node1 ~]# yum install dstat
常用选项
-c, --cpu cpu信息
-C 0,3,total 哪块cpu-d, --disk 磁盘读写-D total,sda 显示磁盘的相关信息-g, --page 显示page相关的速率数据;-i, --int 终端-l, --load enable load average stats (1 min, 5 mins, 15mins)-m, --mem Memory的相关统计数据-n, --net 网络的相关统计数据;-N eth1,total-p, --proc 进程状态-r: --io 显示io请求的相关的统计数据;-s --swap: 显示swapped的相关统计数据;-t, --time 当前时间-y, --sys cpu中断 切换--aio 异步io--fs, --filesystem 文件数量和inodes--ipc 队列信号量共享内存--raw 全部socket--socket tcp udp等--tcp --udp --output file--top-cpu 最高cpu使用--top-cputime--top-io: 最占用io的进程;--top-mem: 最占用内存的进程;--top-latency: 延迟最大的进程;
dstat delay count
[root@node1 ~]# dstat 1 2 You did not select any stats, using -cdngy by default.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read writ| recv send| in out | int中断 csw-上下文切换 0 0 100 0 0 0|3413B 4582B| 0 0 | 0 0 | 87 64 0 0 100 0 0 0| 0 0 | 120B 818B| 0 0 | 71 53 0 0 100 0 0 0| 0 0 | 60B 338B| 0 0 | 48 41
查看cpu
[root@node1 ~]# dstat -c 1 1----total-cpu-usage----usr用户占用比率 sys内核 idl空闲 wai等待 hiq硬件中断 siq软件中断 0 0 100 0 0 0 0 0 100 0 0 0
查看内存
[root@node1 ~]# dstat -m 1 1------memory-usage----- used buff cach free 294M 2080k 472M 1055M 294M 2080k 472M 1055M
磁盘读写
[root@node1 ~]# dstat -d 1 1-dsk/total- read writ3406B 4573B 0 0
平均负载 过去1,5,15分钟负载 ,0-0.8顺畅,1是满负载 超过5是快不行了
[root@node1 ~]# dstat -l 1 1---load-avg--- 1m 5m 15m 0 0.01 0.05 0 0.01 0.05
网络io速度
[root@node1 ~]# dstat -n 1 1-net/total- recv接收 send发送 0 0 60B 194B
进程状态
[root@node1 ~]# dstat -p 1 1---procs---run(运行) blk(阻塞 不可中断) new(新)0.0 0 0.2 0 0 0
socket状态
[root@node1 ~]# dstat --socket 1 1------sockets------tot tcp udp raw frg574 4 3 0 0574 4 3 0 0
tcp状态
[root@node1 ~]# dstat --tcp 1 1----tcp-sockets----lis监听 act确认 syn同步 tim等待 clo关闭 4 2 0 0 0 4 2 0 0 0
最高使用cpu
[root@node1 ~]# dstat --top-cpu 1 1-most-expensive- cpu processvmtoolsd 0.0
最多使用cpu时间
[root@node1 ~]# dstat --top-cputime 1 1--highest-total-- cputime processvmtoolsd 1055vmtoolsd 635
最多io
[root@node1 ~]# dstat --top-io 1 1----most-expensive---- i/o processbash 34k 3198Bsshd: root@ 146B 180B
最多内存
[root@node1 ~]# dstat --top-mem 1 1--most-expensive- memory processfirewalld 27.0Mfirewalld 27.0M
最高延迟
[root@node1 ~]# dstat --top-latency 1 1--highest-total-- latency processvmtoolsd 85kworker/1:1 60
非内核进程默认priority=120,为了方便读取很多场景使用20
nice值范围在-20-19调优后 0<=priority<=39增加优先级
[root@node1 yum.repos.d]# nice -n -5 htop
[root@node1 14511]# cat /proc/13828/schedhtop (13828, #threads: 1)-------------------------------------------------------------------......prio : 115.......
降低优先级
[root@node1 yum.repos.d]# nice -n 5 htop [root@node1 ~]# ps axo uname,pid,ppid,tty,pcpu,pmem,rtprio,priority,ni,vsz,rsz,s,start,cmd|grep htoproot 13851 2368 pts/1 0.2 0.1 - 25 5 122432 2116 S 08:42:53 htop
运行中的程序可以用renice进行调优
#renice [-n] NICE PID...[root@node1 ~]# renice -n -3 1385113851 (进程 ID) 旧优先级为 5,新优先级为 -3
转载于:https://blog.51cto.com/marvin89/2110394