一、

在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,幸好LINUX 可以动态调整请求队列数,默认的请求队列数存放在 /sys/block/hda/queue/nr_requests 文件中,

磁盘队列长度
/sys/block/sda/queue/nr_requests 默认只有 128 个队列,可以提高到 512 个。会更加占用内存,但能更加多的合并读写操作,速度变慢,但能读写更加多的量


请看下面的例子:

[root@mirror2 queue]# cat /sys/block/sda/queue/nr_requests
128
默认请求队列数为128.    做一次测试来看看效果
 
time dd if=/dev/zero of=test bs=1M count=1000
 
看一下总共花了多长时间
 
现在把该参数调整512看一下
time dd if=/dev/zero of=test bs=1M count=1000
速度是不是快很多,大幅提升磁盘的吞吐量,缺点是牺牲一定的内存。

二、

# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# Enable TCP window scaling
net.ipv4.tcp_window_scaling: = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase Linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000
 
将这些设置添加到 /etc/sysctl.conf 的现有内容中。第一个设置启用 TCP SYN cookie。当从客户机发来新的 TCP 连接时,数据包设置了 SYN 位,服务器就为这个半开的连接创建一个条目,并用一个 SYN-ACK 数据包进行响应。在正常操作中,远程客户机用一个 ACK 数据包进行响应,这会使半开的连接转换为全开的。有一种称为 SYN 泛滥(SYN flood) 的网络攻击,它使 ACK 数据包无法返回,导致服务器用光内存空间,无法处理到来的连接。SYN cookie 特性可以识别出这种情况,并使用一种优雅的方法保留队列中的空间(细节参见 参考资料 一节)。大多数系统都默认启用这个特性,但是确保配置这个特性更可靠。
启用 TCP 窗口伸缩使客户机能够以更高的速度下载数据。TCP 允许在未从远程端收到确认的情况下发送多个数据包,默认设置是最多 64 KB,在与延迟比较大的远程客户机进行通信时这个设置可能不够。窗口伸缩会在头中启用更多的位,从而增加窗口大小。
后面四个配置项增加 TCP 发送和接收缓冲区。这使应用程序可以更快地丢掉它的数据,从而为另一个请求服务。还可以强化远程客户机在服务器繁忙时发送数据的能力。
最后一个配置项增加可用的本地端口数量,这样就增加了可以同时服务的最大连接数量。
在下一次引导系统时,或者下一次运行 sysctl -p /etc/sysctl.conf 时,这些设置就会生效。

 三、vmstat

输出信息简介:

  Proc

  r:运行和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)

  b:处于不可中断状态的进程数。常见情况由IO引起

  Memory

  swpd:切换到交换内存上的内存(默认以KB为单位)

  说明:如果它不为0或者比较大比如超过100M,但是si so 的值长期为0.这种情况不用担心系统性能

  free:空闲的物理内存

  buff:作为buffer cache的内存,对块设备的读写作缓冲

  cache:作page cache的内存,文件系统级的cache

  如果cache值大的时候说明cache住的文件数多,如果频繁访问到的文件都能被cache住那磁盘的读IO bi会非常小。

  Swap

  si: 交换内存使用,由磁盘调入内存

  so: 交换内存使用,由内存调入磁盘

  说明:如果系统的内存够用的时候这两个值都是0,如果这两个值长期大于0说明系统性能受到影响。

  如果系统的内存free 很少,但是si so也很少,那系统性能不会受到影响的!

  IO

  bi:从块设备读入的数据总量(读磁盘)(KB/s)

  bo:写入到块设备的数据总量(写磁盘)(KB/s)

  System

  in:    每秒产生的中断次数

  cs:    每秒产生的上下文切换次数

  说明:这两个值越大,会看到由内核消耗的CPU时间会越多!

  CPU

  us:    用户进程消耗的CPU时间百分比

  us的值比较高时,说明用户进程的消耗的CPU时间多,如果长期超过50%的使用那就要考虑优化程序算法或加速。

  sy    内核进程消耗的CPU时间百分比

  如果sy的值高时说明系统内核消耗的CPU资源多。要检查原因

  wa    IO等待消耗的CPU时间百分比

  wa值如果高时说明IO等待比较严重。可能是由于磁盘在做大量的随机访问造成,也可能是磁盘的带宽出现瓶颈.

         id:    CPU处于空闲状态时间百分比

我们需要关心的有哪些方面?

  Procs r: 运行的进程比较多,系统很繁忙

  Io bo:   磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常

  Cpu us:     持续大于50,如果是高峰期可以接受

  Cpu wa:     稍微有些高

  Cpu id:  持续小于50,高峰期可以接受

四、top

命令:top

  输出如下:

  top - 12:47:48 up 349 days, 21:50,  2 users,  load average: 3.81, 4.23, 4.34

  Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie

  Cpu(s): 38.7% us,  0.6% sy,  0.0% ni, 58.9% id,  1.7% wa,  0.0% hi,  0.0% si

  Mem:   4147272k total,  4117996k used,    29276k free,   459344k buffers

  Swap:  1052248k total,      192k used,  1052056k free,  3174936k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

  2274 root      15   0 24976  18m 2436 S   62  0.4 151:00.05 python

  第一行:top - 12:47:48 up 349 days, 21:50,  2 users,  load average: 3.81, 4.23, 4.34

  12:47:48        表示当前系统时间

  349 days, 21:50        表示系统启动后到现在的运作时间

  2 users            登录到用户的终端数。同一用户同一时间开多个终端认为是多个用户

  load average: 3.81, 4.23, 4.34    当前系统的平均负载,后面三个值分别为1分钟前、5分钟前、15分钟前进程的平均数

  一般可以认为这个数值超过CPU数目时CPU将比较吃力了!

  说明:查看当前服务器CPU数量的命令:cat /proc/cpuinfo |grep processor|wc -l    我的输出:8