Linux系统性能分析

计算机系统由四个模块组成,分别是cpu、网络、磁盘和内存。在系统和程序出现问题时,应按照一定先后顺序对这四个模块进行排查。下面介绍几种常用工具:

1、top性能监控命令

可以定期显示所有正在运行和实际运行的cpu使用、内存使用、交换内存、缓存大小、缓冲区大小、过程控制、用户等内容。(实时动态)

语法:

top [-] [d] [p] [u] [S] [s] [i] [c]

参数:

d:指定每次刷信息刷新间隔,按空格立即刷新

p:指定监控进程的ID,可以指定查看一个或多个

i:不显示任何闲置或者僵尸进程

c:显示整个命令而不是整个命令名

u:查看指定用户的进程

[root@192 ~]# top
top - 02:05:10 up  2:39,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 158 total,   1 running, 157 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1797052 total,  1511836 free,   167148 used,   118068 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1491412 avail Mem 

   PID USER      PR  NI    VIRT     RES    SHR  S %CPU  %MEM     TIME+ COMMAND
  1885  root        20   0    159380   6012   4652  S   0.3         0.3          0:00.35 sshd          
     1     root        20   0    125372   3856   2568  S   0.0         0.2          0:01.16 systemd
     2     root        20   0       0            0          0     S   0.0         0.0          0:00.01 kthreadd
     4     root         0   -20     0            0          0     S   0.0         0.0          0:00.00 kworker/0:0H
     6     root        20   0       0            0          0     S   0.0         0.0          0:00.17 ksoftirqd/0
     7     root        rt     0       0            0          0     S   0.0         0.0          0:00.00 migration/0
     8     root        20   0       0            0          0     S   0.0         0.0          0:00.00 rcu_bh
     9     root        20   0       0            0          0     S   0.0         0.0          0:00.47 rcu_sched  

现实的进程信息分为两部分,上面5行为整体 信息,下面为每一个进程的信息。

第1行:top - 02:05:10:当前时间  up  2:39:启动时间  2 users:当前用户在线数 

             load average: 0.00, 0.01, 0.05:cpu最近1,5,15分钟平均负载值。

             red hat 官方手册:假如系统有四个cpu,把每个时间段负载值除于4就是每个cpu的负载值,大于1表明cpu过载。

第2行:Tasks: 158 total:进程个数  1 running:正在使用cpu的进程的个数  157 sleeping:进程                 睡眠个数  0 stopped:进程停止个数 0 zombie:进程僵尸个数

第3行: CPU使用情况

第4行:内存使用情况

第5行:交换分区使用情况

下部分: 

PR:进程优先级 0-40  NI:进程优先级 -20-19        (越小优先级越高) 

VIRT:虚拟内存,如:进程申请100MB的内存,但实际使用10MB,那么他会增长100M,而不是实际使用量。

RES:常驻内存,进程当前使用内存大小。如:申请100M的内存,实际使用10M,他只增长10M。

按M以内存占用率排序

按P以CPU使用率排序

按N以PID数值大小排序

按R对排序进行反转

按F显示自定义字段,按上下键移动,按空格键选中,q退出,W保存

按1显示所有CPU负载


top命令是Linux进行系统监控的首选命令,但top监控有很大局限性,通常使用ps和netstat这两个命令来补充top的不足。


2、ps实时监控系统命令

top是对进程实时监控,ps是显示进程状态但是不是动态连续的。ps是常用的监控后台进程的工作情况,如需检测后台情况,就需要使用ps了。 

语法:ps [选项]

参数:

-a:同一终端下所有程序

-A:显示所有进程

-au:显示较详细的信息

-aux:显示所有其他使用者的进程

-e:等于-A

-f:全部列出

-x:显示没有终端控制的进程

r:显示当前终端进程

u:指定用户的进程

-l 让系统显示应用程序的详细运作信息

ps axo 自定义字段 

常用的是ps aux 和 ps -ef  

root@192 ~]# ps -aux
USER   PID %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
root        1      0.0      0.2      125372  3856 ?        Ss   Jun30   0:01 /usr/lib/systemd/systemd 
root        2      0.0      0.0            0             0 ?        S    Jun30   0:00 [kthreadd]
root        4      0.0      0.0            0             0 ?        S<   Jun30   0:00 [kworker/0:0H]
root        6      0.0      0.0            0             0 ?        S    Jun30   0:00 [ksoftirqd/0]
root        7      0.0      0.0            0             0 ?        S    Jun30   0:00 [migration/0]
root        8      0.0      0.0            0             0 ?        S    Jun30   0:00 [rcu_bh]
root        9      0.0      0.0            0             0 ?        R    Jun30   0:00 [rcu_sched]
root       10     0.0      0.0            0             0 ?        S<   Jun30   0:00 [lru-add-drain]
root       11     0.0      0.0            0             0 ?        S    Jun30   0:00 [watchdog/0]
root       13     0.0      0.0            0             0 ?        S    Jun30   0:00 [kdevtmpfs]
root       14     0.0      0.0            0             0 ?        S<   Jun30   0:00 [netns]
root       15     0.0      0.0            0             0 ?        S    Jun30   0:00 [khungtaskd]
root       16     0.0      0.0            0             0 ?        S<   Jun30   0:00 [writeback]
root       17     0.0      0.0            0             0 ?        S<   Jun30   0:00 [kintegrityd]
root       18     0.0      0.0            0             0 ?        S<   Jun30   0:00 [bioset]
root       19     0.0      0.0            0             0 ?        S<   Jun30   0:00 [bioset]
root       20     0.0      0.0            0             0 ?        S<   Jun30   0:00 [bioset]
root       21     0.0      0.0            0             0 ?        S<   Jun30   0:00 [kblockd]
root       22     0.0      0.0            0             0 ?        S<   Jun30   0:00 [md] 

[root@192 ~]# ps -ef |head -5
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0         0    Jun30 ?        00:00:01 /usr/lib/systemd/systemd 
root          2      0         0    Jun30 ?        00:00:00 [kthreadd]
root          4      2         0    Jun30 ?        00:00:00 [kworker/0:0H]
root          6      2         0    Jun30 ?        00:00:00 [ksoftirqd/0]

 VSZ:虚拟内存  RSS:实际内存   TTY:启动进程终端名称,不是从终端启动的进程显示为?

STAT:运行状态。R表示运行,S表示可中断休眠,D表示不可中断休眠,T表示停止的进程,Z表示僵尸进程,X表示死掉的进程,s进程的领导者(在他之下有子进程),<高优先级进程,+位于后台的进程组。


介绍几种查看指定进程PID的方法: 

1.cat命令

如:cat  /run/sshd.pid

2.使用pidof

如:pidof sshd

3.使用pgrep

如:pgrep sshd

  • pidof 只能使用进程名称来查找与之关联的 PID。
  • pgrep 允许使用更强大的模式匹配(正则表达式或通配符)来查找与之关联的 PID。如:pgrep 'httpd*'

 3、kill命令(信号控制)

kill命令用于终止指定进程的运行。kill -l查看全部信号。

常用信号(默认15):

1                  SIGHUP                  启动被终止的进程,重新加载PID不会发生变化

9                  SIGKILL                  强制终止进程,此信号可能导致进程无法再次重启 

15                SIGTERM               默认信号,正常终止

18                SIGCONT               恢复进程

19                SIGSTOP               暂停进程

killall 命令用于终止某个指定名称的服务所对应的全部进程。如:killall vsftpd 

pkill是一个用于向进程发送信号并终止它们的命令行工具。使用 pkill,你可以通过进程名称或其他匹配模式来杀死一个或多个进程。它会发送一个指定的信号给匹配的进程。

如:1.通过进程名称终止进程:

pkill apache

2.通过匹配模式终止进程:

pkill -f <匹配模式>

例如,要终止所有命令行中包含 httpd 的进程,可以运行命令:pkill -f httpd


注意:作业控制

作业控制是一个命令行功能,允许一个shell实列运行和管理多个命令。如果没有作业控制,父进程fork()一个子进程后将休眠,直到子进程退出。使用作业控制可以选择性暂停、恢复以及异步运行命令,让shell可以在子进程期间返回接受其他命令。

前台进程:是在终端运行的命令,该终端为进程的控制端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。

后台进程:没有控制端,不需要终端交互。

 在后台创建的进程,使用ctrl+c组合键并不能结束该进程。

&为后台符,ctrl+z组合键可以暂停进程,bg可以把任务移至后台,fg可以后台 移至前台。jobs查看当前作业。

4、netstat监控网络状态命令 

用来显示网络连接、路由表和网络接口信息。

语法:netstat [-选项]

参数:

-a 显示所有套接字,包括正在监听的套接字

-i  显示所有网络接口信息

-n 以网络IP地址代替名称,显示网络连接情形

-t  显示TCP协议连接情况

-u 显示UDP协议连接情况

-v 显示正在进行工作的

-p 显示建立相关的程序名和pid

-r 显示核心路由表,同route -e

-s 显示每个协议的统计

5、ifconfig查看地址命令 

 通常要以root身份登录或使用sudo权限。

语法:ifconfig [网络设备] [参数]

up 启动指定网络设备

down 关闭指定网络设备 

add 设置IPv6地址

del 删除指定IPv6地址

address 设置IPv4地址

6、ss显示连接状态命令 

查看服务器连接数一般使用netstat命令。ss命令的优势在于他能够显示更多、更详细关于TCP的连接状态信息,而且更加快速。

语法:

ss [参数] 或 ss [参数] [过滤]

参数:

-n 不解析主机名

-r 解析主机名

-a 显示所有套接字

-l 显示监听状态的套接字

-m 显示套接字的内存使用情况

-p 显示使用套接字的进程

-4 仅显示IPv4的套接字

-6 仅显示IPv6的套接字

-t 仅显示TCP套接字

-u 仅显示UDP套接字

列出处于time-wait 状态的IPv4套接字

 ss -4 stat time-wait 

显示所有源端口或目的端口为ssh的套接字

 ss -l '( sport = :22 or dport = :22 )'

显示目的端口是443或80的套接字

ss -nt '( dst :443 or dst :80 )'

对地址和端口进行过滤

ss -nt dst 192.168.100.1:22

7、free显示内存命令 

语法:free -[选项]

参数:

-m 以MB为单位输出样例

-h 以人类可读方式显示 

-t 列出每列统计信息

-s 设置多少秒自动刷新

-c 与-s配合使用,控制刷新结果次数

8、df查看磁盘占用命令 

df命令主要是用来展示每个文件系统的信息,包括文系统,已使用、未使用、已使用空间的占用百分比,以及挂载点信息。df命令的功能是显示指定磁盘文件的可用空间,如果没有指定文件名,则显示当前被挂载的文件系统的可用空间。

语法:df [选项] [文件]

参数:

-a 显示全部文件系统列表

-h 以人类 易读的方式显示

-i 显示inode信息

-l 只显示本地文件系统

-T 列出文件系统类型

-t<> 只显示指定文件系统的磁盘信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值