博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 进程管理
阅读量:6935 次
发布时间:2019-06-27

本文共 7576 字,大约阅读时间需要 25 分钟。

进程是程序运行的一个副本,存在生命周期,cpu按照时间分配每个进程运行,还未结束的进程将保存在内存存储的固定格式中(task struct),多个任务的task struct组成的链表称task list。我们用指令查看的结果其实就是保存在task list中的数据,进程间的数据通过cow写时复制实现数据独立。

  • 进程优先级
    • 实时优先级:0-99,数字越大,优先级越高;实时优不可调,优先级最高。
    • 静态优先级: 100-139,数字越小,优先级越高;非内核程序一般都属于这类,默认120,可以用nice值来调整,nice值范围在 -20-19,为了方便显示,priority默认显示 20,范围在0-39之间,实际是100-139。

进程内存分配,一个4G内存机器,内核会把物理内存用Page Frame形式分配给每个进程,最大3G,所以,每个进程都一位自己是除了内核唯一的进程,进程中的数据分为两大类。

  1. VSZ:虚拟内存集合,包含大量的库引用
  2. RSS:常驻内存,一些重要的指令集

进程状态 :

  1. 运行态:running
  2. 就绪态:ready
  3. 睡眠态:
    1. 可中断:interruptable 无须额外数据准备
    2. 不可中断:uninterruptable 比如io过程中 还未加载完成
  4. 停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped
  5. 僵死态:zombie

ps

ps有3种显示风格

UNIX风格,选项带一个 -
BSD风格 选项不带 -
GNU 带两个-的长选项

BSD风格:

常用选项

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使用时间

UNIX风格

常用选项

-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

uname
group
fuid filesystem access user ID
fuser
gid
%cpu pcpu
%mem pmem
psr processor that process is currently assigned to 运行于哪颗CPU之上
pid
ppid
tty
rtprio 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

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

htop 使用

说完top,在介绍一款升级版top htop,相比top,htop提供更多的鼠标方便操作,更直观的可视化。

[root@node1 yum.repos.d]# yum install htop

Linux 进程管理

帮助说明

/ search

p 详细/简洁 程序路径
t 树状显示 可查看进程关系
u 根据user筛选
K 显示/隐藏 内核线程 而在top是显示的
H 显示/隐藏 用户线程
F 光标跟踪程序
P 根据cpu排序 M 根据内存排序 T根据cpu占时间排序
I 逆序
自定义字段排序
space 下一个经常
K 结束进程
a 绑定进程在哪个cpu
l 显示进程打开的文件
s 查看当前进程发起的系统调用
i 涉及优先级
] 增加优先级
[ 减少优先级

选项:

-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;


dstat

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

Linux 进程管理

[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

Linux 进程管理

运行中的程序可以用renice进行调优

#renice  [-n]  NICE  PID...[root@node1 ~]# renice -n -3  1385113851 (进程 ID) 旧优先级为 5,新优先级为 -3

转载于:https://blog.51cto.com/marvin89/2110394

你可能感兴趣的文章
CrazyWing:Python自动化运维开发实战 六、流程控制
查看>>
tomcat上传war包失败
查看>>
网页禁止行为的总结
查看>>
使用ISAPI_Rewrite做实用的重定向
查看>>
3.6 迁移故障恢复
查看>>
DTS增量/同步支持DDL迁移的说明
查看>>
java mp3播放器 无界面
查看>>
VII python面向对象
查看>>
程序员在囧途之做私活小记
查看>>
【Go语言】【12】GO语言的结构体
查看>>
python中try Except抛出异常使用方法
查看>>
mysql数据库创建函数过程
查看>>
Mysql show Status参数详解
查看>>
DPI 设置过大该如何还原?
查看>>
运维学习资料(2)
查看>>
<Power Shell>02 认识powershell
查看>>
Oracle日常巡检
查看>>
jQuery用于请求服务器的函数
查看>>
让iis7.5显示php错误的详细信息~
查看>>
C#中字符串的处理
查看>>