linux内核优化参数详解及网站简单压力测试

linux 专栏收录该内容
8 篇文章 0 订阅

linux内核优化参数详解及网站简单压力测试

安装好linux WEB服务器架构以后,需要根据网站应用的实际情况对内核进行优化。让服务器达到最佳状态

Linux内核参数的优化可在/etc/sysctl.conf末尾增加优化代码(内容可根据服务器实际情况进行调整)

vi /etc/sysctl.conf
 
# Add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  36768
net.core.somaxconn = 36768
 
net.core.wmem_default = 8588608
net.core.rmem_default = 8588608
net.core.rmem_max = 16877216
net.core.wmem_max = 16877216
 
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
 
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
 
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3376800
net.ipv4.ip_local_port_range = 1024  65535
#net.ipv4.ip_conntrack_max = 10000

使配置生效

/sbin/sysctl -p

 

下面对各个参数进行详细描述

net.ipv4.tcp_max_syn_backlog

  记录的那些尚未收到客户端确认信息的连接请求的最大值。对于超过128M内存的系统而言,缺省值是1024,低于128M小内存的系统则是128。

  SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()和Accept() ),是用另一个队列单独存放半打开连接。

  这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明<1000p/s)加大SYN队列长度可以容纳更多等待连接的网络连接数,一般遭受SYN Flood攻击的网站,都存在大量SYN_RECV状态,所以调大tcp_max_syn_backlog值能增加抵抗syn攻击的能力。

  net.core.netdev_max_backlog

  每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

  net.core.somaxconn

  调整系统同时发起并发TCP连接数,可能需要提高连接储备值,以应对大量突发入局连接请求的情况。 如果同时接收到大量连接请求,使用较大的值会提高受支持的暂挂连接的数量,从而可减少连接失败的数量。大的侦听队列对防止DDoS攻击也会有所帮助。挂起请求的最大数量默认是128。

  net.core.wmem_default

  该参数指定了发送套接字缓冲区大小的缺省值(以字节为单位)

  net.core.rmem_default

  该参数指定了接收套接字缓冲区大小的缺省值(以字节为单位)

  net.core.rmem_max

  该参数指定了接收套接字缓冲区大小的最大值(以字节为单位)

  net.core.wmem_max

  该参数指定了发送套接字缓冲区大小的最大值(以字节为单位)

net.ipv4.tcp_timestamps

  Timestamps可以防范那些伪造的sequence号码。一条1G的宽带线路或许会重遇到带out-of-line数值的旧sequence号码(假如它是由于上次产生的)。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉,以提高性能。

  net.ipv4.tcp_synack_retries

  对于远端的连接请求SYN,内核会发送SYN+ACK数据报,以确认收到上一个SYN连接请求包。这是所谓的三次握手(threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的SYN+ACK数目。不应该大于255,默认值是5,对应于180秒左右时间。(可以根据tcp_syn_retries来决定这个值)

  net.ipv4.tcp_syn_retries

  对于一个新建连接,内核要发送多少个SYN连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1 决定的)

  net.ipv4.tcp_tw_recycle

  表示开启TCP连接中TIME-WAIT Sockets的快速回收,默认为0,表示关闭。

  net.ipv4.tcp_tw_reuse

  表示开启重用,允许将TIME-WAIT Sockets重新用于新的TCP连接,默认为0,表示关闭。这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助。

  net.ipv4.tcp_mem

  tcp_mem有3个INTEGER变量:low, pressure, high

  low:当TCP使用了低于该值的内存页面数时,TCP没有内存压力,TCP不会考虑释放内存。(理想情况下,这个值应与指定给tcp_wmem的第2个值相匹配。这第2个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072*300/4096)

  pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是TCP可以使用的总缓冲区大小的最大值(204800*300/4096)

  high:允许所有TCP Sockets用于排队缓冲数据报的页面量。如果超过这个值,TCP连接将被拒绝,这就是为什么不要令其过于保守(512000*300/4096)的原因了。在这种情况下,提供的价值很大,它能处理很多连接,是所预期的2.5倍;或者使现有连接能够传输2.5倍的数据。

  一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

  net.ipv4.tcp_max_orphans

  系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的DoS攻击﹐千万不要依赖这个或是人为的降低这个限制

  net.ipv4.ip_local_port_range

  将系统对本地端口范围限制设置为1024~65000之间

  net.ipv4.ip_conntrack_max = 10000

  设置系统对最大跟踪的TCP连接数的限制(CentOS 5.6无此参数)

 

用Webbench进行简单的压力测试

  Webbench是有名的网站压力测试工具。Webbench支持多平台,FreeBSD、Linux、Windows都可以使用。Webbench最多可以模拟3万个并发连接去测试网站的负载能力。

Webbench安装

wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

在编译webbench的时候可能会出现下面类似的错误:

ctags *.c
/bin/sh: ctags: command not found
make: [tags] Error 127 (ignored)

  解决方法:由于是缺少ctags组件,安装后即可。

yum -y –disablerepo=* –enablerepo=c6-media install ctags

对网站进行测试

webbench -c 500 -t 30 http://192.168.1.18/phpinfo.php

参数说明:-c表示并发数,-t表示时间(秒)

结果如下:

Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.18/phpinfo.php
500 clients, running 30 sec.

Speed=1806 pages/min, 8064 bytes/sec.
Requests: 790 susceed, 0 failed.

  • 2
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值