出现以下问题,怎么解决?

找出系统中使用CPU最多的进程?

找出系统中使用内存最多的进程?

找出系统中对磁盘读写最多的进程?

找出系统中使用网络最多的进程?

1.优化目标

系统的运行状况: CPU-> MEM ->DISK*-> NETWORK -> 应用程序调优。

性能优化的4个子系统:

CPU(命令top,再P)

Memory(命令top,再m)

IO(工具iostat)

Network(工具nethogs)

2.查看CPU内存负载

2.1 查看CPU负载相关工具

[root@localhost ~]# uptime
13:22:30 up 8 min,  4 users,  load average: 0.14, 0.38, 0.25
12:38:33 当前时间
up 50days 服务器连续运行50天
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

2.2 例:找出前当系统中,CPU存在瓶颈的服务器

服务器1: load average: 0.15, 0.08, 0.01 1核

服务器2: load average: 4.15, 6.08, 6.01 1核

服务器3: load average: 10.15, 10.08, 10.01 4核

答案:2,如果服务器的CPU为1核心,则load average中的数字 >=3 负载过高,如果服务器的CPU为4核心,则load average中的数字 >=12 负载过高。

任务队列的平均长度是什么?

Linux系统调优
Linux系统调优

队列数为3时,如图:理论上:单核心,1分钟的系统平均负载不要超过3,这个经验值。

2.3 按照实际使用CPU,从大到小排序显示所有进程列表

[root@stu003 ~]# ps -aux --sort -pcpu | more   #按cpu降序排序

查看 -pcpu 帮助:

[root@Hjj ~]# man ps  #然后搜索 pcpu  ,找到下面内容
  pcpu         cpu utilization   # cpu利用率

注:-pcpu 和-cpu 相比,-pcpu可以显示出进程绝对路径,方便找出木马程序运行的路径。也可直接用命令top再按P。

2.4 按照实际使用内存,从大到小排序显示所有进程列表

[root@Hjj ~]#  ps -aux  --sort -rss | more 内存降序排序(去掉减号就是升序)
或:
[root@Hjj ~]#  ps -aux  --sort -rss > a.log

也可直接top再按m,如下。

Linux系统调优

3.对磁盘读写最多的进程

iostat 可以显示CPU和I/O系统的负载情况及每个磁盘分区的读写状态信息。

常用参数:

-d 仅显示磁盘统计信息;

-k 以K为单位显示每秒的磁盘请求数,默认单位块;

-p device | ALL 用于显示块设备及系统分区的统计信息;

kB_read/s 每秒从磁盘读入的数据量,单位为K;

kB_wrtn/s 每秒向磁盘写入的数据量,单位为K;

kB_read 读入的数据总量,单位为K;

kB_wrtn 写入的数据总量,单位为K。

实战场景:公司的服务器很卡,查看CPU使用率不高,内存也够用,但就是卡,尤其是打开新程序或文件时,更卡。此时是哪出问题了?

[root@Hjj ~]# iostat -p sda -dk
Linux 2.6.32-220.el6.x86_64 (Hjj) 08/04/2015 _x86_64_ (4 CPU)
 
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               7.25       252.33        12.99     206953      10657
sda1              0.63         2.43         0.01       1996          9
sda2              5.99       247.27        12.98     202805      10648
sda3              0.43         1.77         0.00       1452          0

给磁盘写入一些内容, 写入时尽可能不读磁盘?

[root@xuegod63 ~]# dd if=/dev/zero  of=a.txt bs=10M  count=1000 ; sync 

读入的数据用/dev/zero ,/dev/zero不会读磁盘的。sync  #把内存中的数据快速写到磁盘上。 只做dd不执行sync,不容易看不出写入效果。

[root@xuegod63 ~]# iostat  -p sda -dk
Linux 2.6.32-220.el6.x86_64 (xuegod63.cn) 	03/03/2017 	_x86_64_	(4 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               6.07       128.02       463.04     298190    1078577
sda1              0.25         0.99         0.00       2317          9
sda2              5.60       126.10       463.04     293721    1078568

3.2 正在使用磁盘的进程

[root@xuegod63 ~]# iotop -o -d 1

另一个终端对磁盘进行大量读操作,执行:

[root@xuegod63 ~]# find /

以下是结果:

[root@Hjj ~]# iotop -o -d 1     #显示正在使用磁盘的进程
Total DISK READ: 1458.61 K/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND             
 2654 be/4 root     1458.61 K/s    0.00 B/s  0.00 % 60.62 % find /
1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init

4.查看网络使用

实战1:使用nload监控总体带宽使用情况

实战2:使用iptraf查看每个链接与主机之间的数据,找出恶意消耗带宽最多的IP

实战3:使用nethogs找出使用带宽最多的进程

4.1 使用nload监控总体带宽使用情况

用nload打开监控,在另一个终端执行。

[root@xuegod63 ~]# ab -n 1000 -c 2 http://www.baidu.com/index.html  #产生一些测试数据

4.2 iptraf

iptraf是一款交互式、色彩鲜艳的IP局域网监控工具。它可以显示每个连接以及主机之间传输的数据量。

Incoming:下载,Outgoing:上传。

分析服务器上某个端口上产生的流量。实战背景: 晚上下载了一个黑客工具,想知道这个软件有没有留后门,怎么办?在运行软件之前,先监控一下流量,Statistical breakdowns. 统计分析。

Linux系统调优
Linux系统调优
Linux系统调优

4.3 nethogs

nethogs是一款小巧的"net top"工具,可以显示每个进程所使用的带宽,并对列表排序,将耗用带宽最多的进程排在最上面。万一出现带宽使用突然激增的情况,用户迅速打开nethogs,就可以找到导致带宽使用激增的进程。nethogs可以报告程序的进程编号(PID)、用户和路径。

实战情景:突然今天11:00左右,运维人员接到IDC机房电话,说你的网站流量对外输出很多,这样应该怎么办?

Linux系统调优