Linux性能监控工具和进程管理命令

1.  CPU监控工具--top

    1.  top工具  动态查看进程变化,监控linux的系统状况

        

      第一行:同uptime命令的结果一样。

        13:31:37  当前时间

        up 41 days,19:38 系统运行时间

        1 user         当前登录用户数

        load average:   0.00 0.00 0.00  系统负载,任务队列的平均长度。三个数值分别为1分钟,5分钟,15分钟。

      第二行:进程信息。

        total  进程总数

        running  正在运行的进程数

        sleeping  睡眠的进程数

        stopped  停止的进程数

        zombie  僵尸进程数

      第三行:cpu信息。

us   用户空间占用CPU百分比 
sy   内核空间占用CPU百分比 
ni   用户进程空间内改变过优先级的进程占用CPU百分比 
id   空闲CPU百分比 
wa   等待输入输出的CPU时间百分比 
hi   硬中断(Hardware IRQ)占用CPU的百分比
si   软中断(Software Interrupts)占用CPU的百分比

st   (Steal time) 是当 hypervisor 服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间的百分比。

      第四行:内存信息。

total   物理内存总量 
used   使用的物理内存总量 
free   空闲内存总量 
buffers   用作内核缓存的内存量     

      第五行:swap交换分区

total   交换区总量 
used   使用的交换区总量 
free   空闲交换区总量 
cached   缓冲的交换区总量。 
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 
该数值即为这些内容已存在于内存中的交换区的大小。 
相应的内存再次被换出时可不必再对交换区写入。     

      第六行:进程信息区

PID 进程id 
PPID 父进程id 
RUSER Real user name 
d UID 进程所有者的用户id 
e USER 进程所有者的用户名 
f GROUP 进程所有者的组名 
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? 
h PR 优先级 
i NI nice值。负值表示高优先级,正值表示低优先级 
j P 最后使用的CPU,仅在多CPU环境下有意义 
k %CPU 上次更新到现在的CPU时间占用百分比 
l TIME 进程使用的CPU时间总计,单位秒 
m TIME+ 进程使用的CPU时间总计,单位1/100秒 
n %MEM 进程使用的物理内存百分比 
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES 
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA 
r CODE 可执行代码占用的物理内存大小,单位kb 
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb 
t SHR 共享内存大小,单位kb 
u nFLT 页面错误次数 
v nDRT 最后一次写入到现在,被修改过的页面数。 
w S 进程状态。 
D=不可中断的睡眠状态 
R=运行 
S=睡眠 
T=跟踪/停止 
Z=僵尸进程 
x COMMAND 命令名/命令行 
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 
z Flags 任务标志,参考 sched.h

    2.  top参数

-d 后接秒数,指定每两次屏幕信息刷新之间的时间间隔,表示进程界面更新时间(默认为5秒)。

   当然用户可以使用s交互命令来改变之。 
-b,-n搭配,批次执行top  ——> top -b -n 2 > /tmp/top.txt #将top进程表在/tmp/top.txt中打印2次。

-p 通过指定监控进程ID来仅仅监控某个进程的状态。 ——> top -p 1 #查看进程号为1的进程。
-q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 
-S 指定累计模式 
-s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 
-i 使top不显示任何闲置或者僵死进程。 
-c 显示整个命令行而不只是显示命令名

    3.  top实战场景

a. 2500毫秒刷新一次TOP内容,总共5次,输出内容存放到performace.txt文件中
  # top -b -d 2.5 -n 5 > performace.txt
  注:要将内容输出到文件中,必须使用-b,表示批处理选项

b. TOP命令如何快速按%CPU、%MEM、TIME+列排序
    a). %CPU:使用大写字母按键:P
    b). %MEM:使用大写字母按键:M
    c). TIME+:使用大写字母按键: T

    注:TOP默认排序为倒序,如果确实需要升序排序,可以使用大写字母按键:R

c. TOP命令中显示其它列值、将两列互换等
    a). 选择显示列或隐藏列:使用小写字母按键:f
    c). 交换列显示顺序:使用小写字母按键: o
    b). 选择需要排序的列:使用大写字母按键:F

2.  CPU监控工具--sysstat

    1.  安装sysstat工具

        yum install sysstat -y

    2.  mpstat命令

3.  内存监控工具

    1.  free -m

    2.  vmstat

        vmstat [option] [delay(count)]

        vmstat 2 3  每2s执行一次,共3次

        

 

        procs

          r  等待运行的进程个数,CPU上等待运行的任务和队列长度,如果等待运行的进程数越多,意味着CPU非常繁忙。如果该参数长期大于和等于逻辑CPU个数,则CPU资源可能存在较大的瓶颈。

          b  被阻塞的任务队列长度

        memory

          swpd  交换内存的使用总量

          free  空闲的物理内存总量

          buffer  用于buffer的内存总量

          cache  用于cache的内存总量

        swap

          si  每秒进入swap的数据量,以kb/s为单位

          so  每秒离开swap的数据量,以kb/s为单位

          si/so的值太大,系统性能很差        

  内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。

   当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,这个是不正确的。不能光看这一点,还要结合si和so,

   如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。 

        io

          bi  从块设备读入数据到内存kb/s

          bo  保存数据至块设备的速率kb/s

          这两个值大,说明系统的I/O繁忙

        system

          in  每秒多少个中断

          cs  上下文切换的速率

          代表系统与接口设备交换频繁

        cpu

          us  用户层百分比

          sy  内核层百分比

          id  空闲百分比

          wa  等待IO百分比  

          st  被盗用的CPU百分比

        

        vmstat -s   显示内存统计数据

        vmstat -d   显示磁盘统计数据

4.  硬盘监控工具

    1.  指标

        IOPS:  每秒I/O次数

        顺序IO:  

        随机IO

    2.  df -h

    3.  iotop命令  

        安装: yum install iotop -y

        iotop一个用来监视磁盘I/O使用情况。

--version #显示版本号
-h, --help #显示帮助信息
-o, --only #显示进程或者线程实际上正在做的I/O,而不是全部的,可以随时切换按o
-b, --batch #运行在非交互式的模式
-n NUM, --iter=NUM #在非交互式模式下,设置显示的次数,
-d SEC, --delay=SEC #设置显示的间隔秒数,支持非整数值
-p PID, --pid=PID #只显示指定PID的信息
-u USER, --user=USER #显示指定的用户的进程的信息
-P, --processes #只显示进程,一般为显示所有的线程
-a, --accumulated #显示从iotop启动后每个线程完成了的IO总数
-k, --kilobytes #以千字节显示
-t, --time #在每一行前添加一个当前的时间
-q, --quiet #suppress some lines of header (implies --batch). This option can be specified up to three times to remove header lines.
-q column names are only printed on the first iteration,
-qq column names are never printed,
-qqq the I/O summary is never printed.

 

常用命令: iotop -oP

    4.  iostat

        yum install sysstat -y

        iostat 主要有三个操作箱,options 操作项,interval指定统计时间间隔,count总共输出次数

        

        -c:  查看cpu状态

        -k:  

        参考文档  https://www.cnblogs.com/xiuluo--angel/p/7086637.html

    5.  pidstat命令

        pidstat -d 1  间隔1秒执行一次       

5.  网络监控工具

    1.  iftop命令

        用来监控网卡的实时流量。

    2.  安装iftop

        yum install iftop -y 

    3.  编译安装iftop      

cd /usr/local/src
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar xvf iftop-0.17.tar.gz
cd iftop-0.17
./configure --prefix=/usr/local/iftop
make
make install  

错误:can't find pcap.h
解决:yum install libpcap-devel -y 

错误:Can't find a curses library supporting mvchgat
解决: yum  install ncurses-devel

添加系统环境变量

    export IFTOP_HOME=/usr/local/iftop
    export PATH=$IFTOP_HOME/sbin:$PATH

    4.  iftop的使用

        1.  运行iftop。

 TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

    2.  iftop相关参数

-i设定监测的网卡,如:# iftop -i eth1

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-n使host信息默认直接都显示IP,如:# iftop -n

-N使端口信息默认直接都显示端口号,如: # iftop -N

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-h(display this message),帮助,显示参数信息

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b使流量图形条默认就显示;

-f这个暂时还不太会用,过滤计算包用的;

-P使host信息及端口信息默认就都显示;

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

    3.  iftop画面的一些操作命令

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

    4.  常用iftop命令

        iftop -npP

        iftop -i eth1 -npP

6.  进程管理工具

    1.  pstree  显示进程树

        安装:  yum install -y psmisc

        centos6:  根进程为init

        centos7:  根进程为systemd

    2.  ps  显示当前进程的快照

        1.  ps的选项有三种风格

            UNIX  必须带有一个-

            BSD  必须不带有-

            GNU  必须带有两个--

        2.  BSD风格

            ps a  与终端无关的进程

            ps x  与终端相关的进程

            ps u  以用户为中心的进程信息

            ps aux  显示所有进程信息

              

            USER:  哪个用户使用该进程

            PID:  进程号

            %CPU  进程使用CPU百分比

            %MEM  进程使用内存百分比

            VSZ  进程使用的虚拟内存使用量(单位KB)

            RSS  常驻内存使用量(单位KB)

            TTY  使用哪个终端,没有终端显示?

            STAT  进程状态(R:运行,S:可中断,D:不可中断,T:停止,Z:僵尸进程,+:前台进程,l:多线程进程,N:低优先级进程,<高优先级进程,s:session leader在它之下有子进程) 

            START  开始时间    

            TIME  实际运行的时间

            COMMAND

          ps axo pid,%cpu,%mem,command  自定义显示哪些字段

        3.  UNIX风格

            ps -e:  显示所有进程

            ps -f:  完整显示进程信息

            ps -ef

              

 

            C:  cpu使用率

            STIME:  进程启动时间  

            TIME:  进程累积时间

            ps -F:  与-f几乎完全相同

            ps -eo pid,ppid,%cpu,%mem  自定义显示字段

        4.  ps实战例子

            查看系统中占用内存最高的进程

            ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz | head -10

            

            查看系统中的僵尸进程

ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'

  

ps:ps命令用于获取当前系统的进程信息.

-e:参数用于列出所有的进程

-o:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。

egrep:是linux下的正则表达式工具

'^[Zz]':这是正则表达式,^表示第一个字符的位置,[Zz],表示z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z或者z字母开头。

    3.  kill  终止一个进程

        每个信号的标识方法

          1.  使用数字标识 -1 -9 

          2.  使用信号全程标识  -SIGHUP

          3.  使用信号简称标识  -HUP

        -l:  显示当前系统可用信号

        常用信号

          1.  1)  SIGHUP:  无须关闭进程而让其重读配置文件

          2.  2)  SIGINT:  相当于ctrl+c ,中断正在运行的进程

          3.  9)  SIGKILL:  杀死运行中的进程(残忍)  

          4.  15)  SIGTREM:  终止运行中的进程(优雅)

          5.  18)  SIGCONT:  唤醒停止的进程

    4.  killall  进程名称

        killall httpd  父进程和子进程都会被杀掉

 

 

                                                     

 

  

            

 

                    

      

        

 

 

      

      

          

 

 

 

 

 

        

      

      

 

posted @ 2018-10-31 13:30  奋斗史  阅读(222)  评论(0)    收藏  举报