一、
在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,幸好LINUX 可以动态调整请求队列数,默认的请求队列数存放在 /sys/block/hda/queue/nr_requests 文件中,
磁盘队列长度
/sys/block/sda/queue/nr_requests 默认只有 128 个队列,可以提高到 512 个。会更加占用内存,但能更加多的合并读写操作,速度变慢,但能读写更加多的量
请看下面的例子:
128
二、
# 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