LAMP服务器优化----Linux内核优化

配置Apache为系统服务

安装Ubuntu系统管理软件

sudo apt install sysv-rc-conf

复制apache 启动文件到系统目录

cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2

注册服务

sysv-rc-conf --level 2 apache2 on

酱紫就可以通过 service apache2 -k start/stop/restart 启动或者重启Apache服务

安装php5.6做下对比。

下载PHP5.6 编译安装。在此不做赘述。

修改httpd.conf
注释掉 LoadModule php7_module 否则会出现内存非法访问的错误。
先在Apache2.4.25+PHP5.6.30下测试
修改httpd.conf 加载php5_module。
重启Apache。

开始测试

使用命令

/usr/local/apache2/bin/ab -n10000 -c200 test.tt/index.php

这里写图片描述

上图说明有1%的请求超过800ms,可以认为连接超时。说明服务器不足以承载200个用户的10000个请求。
按照N是C的50倍,慢慢递减C跟N,C没减1,N减50.找到100%的请求在800ms内的临界值。
如下图,我的虚拟机的临界值是-n7350 -c147
这里写图片描述

使用httpd-mpm

打开httpd.conf找到 httpd-mpm.conf 注释掉前面的 # 号。
重启Apache,使用临界值测试一下
这里写图片描述
说明开启MPM是有效果的。
修改httpd-mpm.conf
这里写图片描述

此时的数量已经达到了156

这里写图片描述

到这里httpd-mpm已经达到最大的负载了。

Linux内核优化

Tcp的链接及断开过程中间是经过一系列状态变换的。有这些状态:
建立链接状态:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED
关闭链接状态:FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT 和 CLOSED。

Linux系统下,TCP连接主动断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数,来及时将TIME_WAIT状态的端口清理掉。

通过 ab 模拟1000个客户端发起200000个并发请求,然后统计linux tcp等待个数,

netstat -tnp awk | grep "{print $6}" | sort | uniq -c

如下图:
这里写图片描述

从上图图中可以看出,有24986个链接等待。
接下来我们优化一下TIMEWAIT,然后再统计。

vi /etc/sysctl.conf

添加如下配置:

这里写图片描述
命令行输入使配置生效

/sbin/sysctl -p
>
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout = 30
修改系統默认的 TIMEOUT 时间
net.ipv4.tcp_keepalive_time = 1200
TCP发送keepalive消息的频度。默认为2小时,改小。tcp链接在空闲 1200秒之后,内核发起关闭链接probe
net.ipv4.tcp_keepalive_intvl = 30
查看系统默认timeout时间: # cat /proc/sys/net/ipv4/tcp_fin_timeout 默认为60秒。
net.ipv4.tcp_keepalive_probes = 3 #如果probe 3次(每次30秒)不成功,内核才彻底放弃
net.ipv4.ip_local_port_range = 1024 65000
向外连接的端口范围。默认为32768到61000,范围改大
net.ipv4.tcp_max_syn_backlog = 2148
SYN队列的长度。默认为1024,改大
net.ipv4.tcp_max_tw_buckets = 5000
系统同时保持TIME_WAIT套接字的最大数量,超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000
net.core.netdev_max_backlog = 1000
进入包的最大设备队列,默认300,改大
net.core.somaxconn = 511
socket的监听队列backlog的上限,默认值为128

调整文件描述符限制

vi /etc/security/limits.conf 

这里写图片描述
添加如上配置
重启系统。

重新通过 ab 模拟1000个客户端发起200000个并发请求,然后统计linux tcp等待TIMEWAIT个数

netstat -tnp | awk ‘{print $6}’ | sort | uniq -c 

结果如下图:
这里写图片描述

TIMEWAIT个数明显减少了
现在试试500个并发,25000个请求

/usr/lical/apache2/bin/ab -n2500 -c500 test.tt/index.php

结果如下图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值