服务器常见参数监测及调优(二)

服务器常见参数监测及调优(二)

IO子系统

vmstat,iostat,sar

IO,输出输入。

一个IO,指的是从磁盘把数据读出来或者把数据写磁盘上,就称之为一个IO

IOPS 每秒钟完成多少个IO (io per second)

10k RPM <--每分钟一万转,120 IOPS

15  RPM <--每分钟15000, 150-200 IOPS

扫描二维码关注公众号,回复: 3314562 查看本文章

一次IO取一个block size大小

block size   越大,IO吞吐量大,但浪费空间较多

     越小,IO吞吐量小,但浪费空间较少

IO 可分为顺序 IO 和 随机 IO 两种

IO的类型:

随机IO

一般的硬盘处理效率最慢的就是随机IO。每个IO完成的数据量非常低。

顺序IO

这些IO涉及数据都是连续存放在磁盘上。

顺序 IO 是指同时顺序请求大量数据,比如数据库执行大量的查询、流媒体服务等,

顺序 IO 可以同时很快的移动大量数据。

相对随机 IO 而言,顺序 IO 更应该重视每次 IO 的吞吐能力(KB per IO)

随机IO更重视每秒的IO次数IOPS

# iostat

Linux 2.6.32-279.el6.x86_64 (li.cluster.com) 04/25/2014 _x86_64_ (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           9.72    0.57    1.34    1.71    0.00   86.66

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda              24.47      2157.44        43.86   17100165     347648

md127             0.02         0.13         0.00       1016          0

dm-0              0.01         0.08         0.00        672          0

tps    每秒的IO传输次数

Blk_read/s  每秒读了多少个block(一个block单位为512bytes)

Blk_wrtn/s  每秒写了多少个block

Blk_read    两次查看的时间间隔内,一共读了多少块(Blk_read/s乘以两次查看时间间隔秒数)

Blk_wrtn    两次查看的时间间隔内,一共写了多少块(Blk_wrtn/s乘以两次查看时间间隔秒数)

# iostat 2 --每两秒显示所有的分区IO状态

# iostat -kx -d sda 2 3

--查看sdaIO状态报告,每两秒打印一次,总共三次 ; -k是表示把默认以每秒多少块显示成每次多少KB-x打印了一些扩展选项

Linux 2.6.32-279.el6.x86_64 (li.cluster.com) 04/25/2014 _x86_64_ (2 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               7.82     4.13   22.09    1.29  1028.68    21.69    89.83     0.15    6.45   2.02   4.72

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     3.50    0.00    3.00     0.00    26.00    17.33     0.02    8.00   7.50   2.25

r/s 每秒完成多少个读IO

w/s 每秒完成多少个写IO <--  IOPS=(r/s+w/s)

rsec/s 每秒读取了多少扇区的数据。 一个扇区=512字节数据

wsec/s 每秒写了多少扇区的数据。

rkB/s   每秒读了多少kb数据

wkB/s 每秒写了多少kb数据

avgrq-sz平均请求数据的大小

avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好。

await

平均完成IO需要等待多少时间, 包含服务时间,还有在队列中等待的时间。

svctm

服务时间,从IO请求产生到,完成IO的时间。从源代码里可以看出:

r/s+w/s*svctm/1000=util

举例子:如果util达到100%,那么此时svctm=1000/r/s+w/s),

假设IOPS1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,

说明系统出了问题。

不过前面已经说过在磁盘阵列等多盘系统中util可能出现偏大的情况,所以svctm相应的也可能偏大。

%util

磁盘带宽使用百分比。如果一直都是100%,说明磁盘很忙。

# sar -b   查看今天历史磁盘IO情况

=======================================================================

网络子系统

网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,

比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、

交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,

增加了监测和判断的复杂度。现在我们使用的所有网卡都称为自适应网卡,

意思是说能根据网络上的不同网络设备导致的不同网络速度和工作模式进行自动调整。

1、检查是否通电

# mii-tool

2、检查网卡的工作模式和修改

# ethtool eth1

# ethtool -s eth1 speed 100 duplex full autoneg on

3,用一些工具扫描内网用户

#ls /share/soft/soft/soft/arp-scan/   --此目录下三个软件包

libpcap-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm

libpcap-devel-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm

arp-scan-1.6.tar.gz

安装方法:因为arp-scan依赖于libpcap-devel,libpcap-devel又依赖于libpcap;而如果你在rhel6_x86_64上安装,它自带libpcap但没有libpcap-devel,并且版本和我这里共享的不同

所以

rpm -ivh libpcap-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm --force  强制安装覆盖自带的版本

rpm -ivh libpcap-devel-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm

然后解压arp-scan

./configure

make

make install

#arp-scan -l --interface br0

4、检测网卡的当前负载

# sar -n DEV 2 10

# cat /proc/net/dev

5,两台主机之间有网线(或无线)、路由器、交换机等设备,

测试两台主机之间的网络性能的一个办法就是在这两个系统之间互发数据并统计结果,看看吞吐量、延迟、速率如何。

iptraf 就是一个很好的查看本机网络吞吐量的好工具,支持文字图形界面,很直观。

yum install iptraf

# iptraf -d br0

6netperf 运行在 client/server 模式下,比 iptraf 能更多样化的测试终端的吞吐量。

/share/soft/netperf/netperf-2.5.0.tar.gz

解压

./configure

make

make install

安装完成后会有netserver(服务器端命令)和netperf(客户端命令)这两个命令

测试方法:服务器和客户端都要安装此软件

在服务器上

# netserver

Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC

# netstat -ntlup |grep 12865 --端口为12865

tcp        0      0 :::12865                    :::*                        LISTEN      18366/netserver     

在客户端上

# netperf -H 10.0.0.21 -l 30    --这里表示一次测试时间为30

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.0.0.21 (10.0.0.21) port 0 AF_INET

# netperf -H 10.0.0.21 -l 30

Recv   Send    Send                          

Socket Socket  Message  Elapsed              

Size   Size    Size     Time     Throughput  

bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  16384    30.39      87.39   --这里的87.39的单位是10^6bits,所以要算每秒多少MB就应该$[87.39*1000000/8/1000/1000]算得多少MB/s大概为10M/s(因为百M局域网理论值为12.5MB/s)

如果要对上面的几大子系统进行微调,一般是对内核参数进行小范围的修改

1,如何查看内核参数

# sysctl -a --这里查看所有当前内核参数的值,这些值都可以在/proc下查到

例如

# sysctl -a |grep ip_forward

net.ipv4.ip_forward = 1

这个参数对应的/proc路径为/proc/sys/net/ipv4/ip_forward

# sysctl -a |grep file-max

fs.file-max = 381908

这个参数对应的/proc路径为/proc/sys/fs/file-max

2,如何修改内核参数

临时修改,重启后不生效;如

echo 1 > /proc/sys/net/ipv4/ip_forward

永久生效,需要修改/etc/sysctl.conf配置文件

net.ipv4.ip_forward = 1 --修改,没有此参数就手动加上

保存后,记得要用sysctl -p使之生效

常见的需要调整的与网络有关参数如下

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_wmem = 8192 131072 16777216

net.ipv4.tcp_rmem = 32768 131072 16777216

net.ipv4.tcp_mem = 786432 1048576 1572864

net.ipv4.ip_local_port_range = 1024 65535

net.ipv4.ip_conntrack_max = 65536

net.ipv4.netfilter.ip_conntrack_max=65536

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

上网了解linux2.6内核后的四种IO调度算法的区别和比较

上网了解linux下文件系统的比较

=========================================================================

linux双网卡绑定(七种模式)

这里使用一台kvm虚拟机来测试(两张网卡物理上要同网段)

注意:如果使用vmware workstation版本来测试的话,在做网卡切换时有可能会造成虚拟机死机等情况(所以用kvm做比较容易实现效果)

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="none"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER=bond0

SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE="eth1"

BOOTPROTO="none"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER=bond0

SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-bond0 --此文件不存在,手动创建

DEVICE="bond0"

BOOTPROTO="static"

IPADDR=10.0.0.11

NETMASK=255.255.255.0

NM_CONTROLLED="no"

ONBOOT="yes"

# cat /etc/modprobe.d/bond.conf --这个文件也不存在,手动创建(名字随意,在此目录以.conf结尾就可以)

alias bond0 bonding

options bond0 miimon=100 mode=1 --miimon=100表示系统每100ms监测一次链路连接状态,mode=1表示为主备模式

# /etc/init.d/NetworkManager stop

# /etc/init.d/network restart  --第一次重启有报错,再重启一次就没问题了

# /etc/init.d/network restart

# chkconfig NetworkManager off

# chkconfig network on

验证

1,使用ifconfig查看(可以看到三个网卡MAC地址一致)

# ifconfig |grep -E "eth|bond" -A 1

bond0     Link encap:Ethernet  HWaddr 00:0C:29:F4:4C:DE  

          inet addr:10.0.0.11  Bcast:10.0.0.255  Mask:255.255.255.0

--

eth0      Link encap:Ethernet  HWaddr 00:0C:29:F4:4C:DE  

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

--

eth1      Link encap:Ethernet  HWaddr 00:0C:29:F4:4C:DE  

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

2,查看网卡状态

# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0   --主备模式目前正在使用的主网卡

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:f4:4c:de --eth0MAC

Slave queue ID: 0

Slave Interface: eth1

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:f4:4c:e8 --eth1MAC,在这里看是和ifconfig看不一样的

Slave queue ID: 0

或者使用iptraf来看

# yum install iptraf

# iptraf    --打开所有网卡查看(可以找另一台机器去ping他,模拟有数据包),只有bond0eth0有数据包,说明eth0为主,eth1为备

3,测试主备切换

ifconfig eth0 down模拟网卡eth0出问题,再查看状态

# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth1   --主网卡成为eth1

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: down  --eth0的状态为down

Speed: Unknown

Duplex: Unknown

Link Failure Count: 1

Permanent HW addr: 00:0c:29:f4:4c:de

Slave queue ID: 0

Slave Interface: eth1

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:f4:4c:e8

Slave queue ID: 0

负载模式的讨论

# cat /etc/modprobe.d/bond.conf

alias bond0 bonding

options bond0 miimon=100 mode=0  --改为0模式,重启kvm(重启network服务的话状态还是1模拟,所以把虚拟机重启一下),再查看状态

# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: load balancing (round-robin)

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:f4:4c:de

Slave queue ID: 0

Slave Interface: eth1

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:f4:4c:e8

Slave queue ID: 0

测试:

还是使用iptraf来测试,会发现bond0eth0,eth1的网卡都会有数据包,并且bond0的数据包为eth0eth1的总和

ifconfig eth0 down断掉一个网卡后,只有bond0eth1有数据包

猜你喜欢

转载自blog.csdn.net/qq_26496673/article/details/80677056