2019独角兽企业重金招聘Python工程师标准>>>
目录
- 系统调优4大子系统
- 实战1:找出系统中使用CPU最多的进程?
- 实战2:找出系统中使用内存最多的进程?
- 实战3:找出系统中对磁盘读写最多的进程?
- 实战4:找出系统中使用网络最多的进程?
系统调优概述
1. 系统的运行状况: CPU-> MEM ->DISK*-> NETWORK -> 应用程序调优
性能优化的4个子系统:
CPU
Memory
IO
Network
2. 分析是否有瓶颈(依据当前应用需求)
出现以下问题,怎么解决?
1、找出系统中使用CPU最多的进程?
2、找出系统中使用内存最多的进程?
3、找出系统中对磁盘读写最多的进程?
4、找出系统中使用网络最多的进程?
1、查看CPU负载相关工具
uptime命令:
[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分钟前到现在的平均值。 |
例1:找出前当系统中,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 负载过高。
队列数为3时,如图:
理论上:单核心,1分钟的系统平均负载不要超过3,这个经验值。
实战1:找出系统中使用CPU最多的进程?
方法1:使用top命令
运行top , 然后数字键1
找出使用CPU最多的进程 ,按大写的P,可以按CPU使用率来排序显示
实战2:按照实际使用CPU,从大到小排序显示所有进程列表
[root@localhost ~]# ps -aux --sort -pcpu | more #按cpu降序排序
查看 -pcpu 帮助:
[root@localhost ~]# man ps #然后搜索 pcpu ,找到下面内容
pcpu cpu utilization # cpu利用率
注: -pcpu 和-cpu 相比, -pcpu 可以显示出进程绝对路径,方便找出木马程序运行的路径。
实战2:找出系统中使用内存最多的进程?
方法1:使用top命令
运行top , 然后按下大写的M 可以按内存使用率来排序显示,大写的P,按照内存的大小,进行排序。
方法2:
实战:按照实际使用内存,从大到小排序显示所有进程列表
[root@localhost ~]#ps -aux --sort -pcpu | more #降序排序
[root@localhost ~]#man ps #然后搜索pcpu,找到姓名内容。
pcpu cpu utilization #cpu利用率
注 : -pcpu和-cpu相比 ,-pcpu可以显示出进程绝对路径,方便找出木马程序运行的路径。
[root@localhost ~]# ps -aux --sort -rss | more 内存降序排序(去掉减号就是升序)
或:
[root@localhost ~]# ps -aux --sort -rss > a.log
rss resident set size 常驻集大小
实例 :
降序排序,CPU从大到小。
3、找出系统中对磁盘读写最多的进程
I/O调优相关查看工具
实战1:查看哪个磁盘或分区最繁忙?
通过iostat命令查看IO是否存在瓶颈
iostat 可以显示CPU和I/O系统的负载情况及每个磁盘分区的读写状态信息.
从而知道我们系统IO 是否存在问题。
安装iostat:
[root@localhost ~]# rpm -ivh /mnt/Packages/sysstat-9.0.4-18.el6.x86_64.rpm
常用参数:
-d 仅显示磁盘统计信息
-k 以K为单位显示每秒的磁盘请求数,默认单位块.
-p device | ALL 用于显示块设备及系统分区的统计信息
例:显示每个分区读写速度
[root@localhost ~]# iostat -p sda -dk
Linux 2.6.32-220.el6.x86_64 (xuegod63.cn) 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
注:
每列含意:
kB_read/s 每秒从驱动器读入的数据量,单位为K.
kB_wrtn/s 每秒向驱动器写入的数据量,单位为K.
kB_read 读入的数据总量,单位为K.
kB_wrtn 写入的数据总量,单位为K.
方法2:
实战:按照实际使用内存,从大到小排序显示所有进程列表
[root@localhost ~]# ps -aux --sort -rss | more 内存降序排序(去掉减号就是升序)
或:
[root@localhost ~]# ps -aux --sort -rss > a.log
3、找出系统中对磁盘读写最多的进程
I/O调优相关查看工具
实战1:查看哪个磁盘或分区最繁忙?
通过iostat命令查看IO是否存在瓶颈
iostat 可以显示CPU和I/O系统的负载情况及每个磁盘分区的读写状态信息.
从而知道我们系统IO 是否存在问题。
安装iostat:
[root@localhost ~]# rpm -ivh /mnt/Packages/sysstat-9.0.4-18.el6.x86_64.rpm
常用参数:
-d 仅显示磁盘统计信息
-k 以K为单位显示每秒的磁盘请求数,默认单位块.
-p device | ALL 用于显示块设备及系统分区的统计信息
例:显示每个分区读写速度
[root@localhost ~]# iostat -p sda -dk
Linux 2.6.32-220.el6.x86_64 (xuegod63.cn) 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
注:
每列含意:
kB_read/s 每秒从驱动器读入的数据量,单位为K.
kB_wrtn/s 每秒向驱动器写入的数据量,单位为K.
kB_read 读入的数据总量,单位为K.
kB_wrtn 写入的数据总量,单位为K.
实战2:查看哪个进程使用磁盘读写最多?
iotop命令,查看哪个进程使用磁盘读写最多
实例:查看系统中使用io最多的进程
参数:
-o, -only 只显示在读写硬盘的程序
-d SEC, –delay=SEC 设定显示时间间隔
退出,按q或ctrl+C
例1:
安装:
[root@localhost ~]# rpm -ivh /mnt/Packages/iotop-0.3.2-3.el6.noarch.rpm
[root@localhost ~]# 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
-o #在读取的进程 -d #时间间隔,多长时间刷新一次。
在另一个终端执行:
[root@localhost ~]# find /
查看结果:
4、找出系统中使用网络最多的进程?
实战1:使用nload监控总体带宽使用情况
实战2:使用iptraf查看每个链接与主机之间的数据,找出恶意消耗带宽最多的IP
实战3:使用nethogs找出使用带宽最多的进程
实战1:使用nload监控总体带宽使用情况
rz 上传nload.rpm到RHEL上
[root@localhost ~]# rpm -ivh nload-0.7.4-1.el6.x86_64.rpm
或wget http://www.roland-riegel.de/nload/nload-0.7.2.tar.gz
tar -zxvf nload-0.7.2.tar.gz
./configure (编译)
常见编译报错
没有c++软件包
yum install -y gcc* #安装所有跟gcc有关的 软件包
再次编译,然后使用echo $?命令 ,查看编译是否出错,返回0,说明没问题。
[root@localhost ~]# yum install nload -y (在centos上,配置好epel源)
yum -y install ncurses* #nload依赖的软件包
[root@localhost ~]# nload #开始监控
然后另一个终端上运行:
[root@localhost ~]# ab -n 10000 -c 2 http://www.baidu.com/index.html #产生一些测试数据
-n # 访问10000次数 -c #时间为2秒
如果没有ab命令 ,安装 : #yum install -y httpd (ab在httpd自带的命令)
查看结果:
Incoming : 下载 Outgoing :上传
[root@localhost ~]# rpm -ivh /mnt/Packages/iptraf-3.0.1-13.el6.x86_64.rpm
iptraf是一款交互式、色彩鲜艳的IP局域网监控工具。它可以显示每个连接以及主机之间传输的数据量。
实战2:使用iptraf查看每个链接与主机之间的数据,找出恶意消耗带宽最多的IP
[root@localhost ~]# yum install -y iptraf
[root@localhost ~]# iptraf
显示下面页面,直接回车,
选择第一个,直接回车。
选择eth0网卡
实战3:分析服务器上某个端口上产生的流量。
实战背景: 晚上下载了一个黑客工具,想知道这个软件有没有留后门,怎么办?
在运行软件之前,先监控一下流量 。
Statistical breakdowns. 统计分析。
选择统计端口上的流量:
#/etc/initd./httpd restart #重启apache服务,查看是否实时检测到80 端口
nethogs是一款小巧的"net top"工具,可以显示每个进程所使用的带宽,并对列表排序,将耗用带宽最多的进程排在最上面。万一出现带宽使用突然激增的情况,用户迅速打开nethogs,就可以找到导致带宽使用激增的进程。nethogs可以报告程序的进程编号(PID)、用户和路径。
实战3: 使用nethogs找出使用带宽最多的进程
nload + nethogs =
[root@localhost ~]#rpm -ivh nethogs-.8.5-1.el6.x86_64.rpm #配好eple源
下载nethogs
解压nethogs : tar -xvf nethogs-0.8.0.tar.gz
cd nethogs
yum install -y ncurses-devel
下载依赖包:
libpcap-devel
rpm -ivh --nodeps libpcap-devel-1.3.0-2.4.1.x86_64.rpm
#make && make install #编译 、安装
#echo $? #上一步骤,没问题
0
#nethogs
打开另一个终端。
使用wget下载东西,查看
总结:
- 系统调优4大子系统
- 实战1:找出系统中使用CPU最多的进程 top -》 P 或 ps -axu --sort -pcpu
- 实战2:找出系统中使用内存最多的进程 top -》 M 或 ps -axu --sort -rss
- 实战3:找出系统中对磁盘读写最多的进程 iostat 和 iotop
实战4:找出系统中使用网络最多的进程 nload , iptraf ,nethogs