网络IO子系统
iptraf 查看当前主机的各个网络设备的流量情况
安装:解压 ; ./Setup
使用:# iptraf -d eth0
netperf 基于c/s架构的带宽测试工具,能够测试出网络设备的带宽能去到多少。
使用:
服务端:需要测试带宽的一端:
# netserver
测试端:用于测试连接服务器能够达到最大的带宽
# netperf -H 10.1.1.22 -l 30
# netperf -H 10.1.1.22 -l 30
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.1.1.22 (10.1.1.22) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 30.05 90.92 <--- 百M网卡能达到90是非常不错。
实时查看网卡的流量
# sar -n DEV 2 5
例子:
# strace -vf -p pid
例子:压力测试lnmp,判断服务器在高并发的情况下,到底是最消耗哪种系统资源?有么有办法进行调优?
该服务器安装nginx+mysql+php,跑的应用是phpwind论坛
模拟并发10000-20000
# ulimit -SHn 65535
# ab -c 2000 -n 60000 http://10.1.1.22/read.php?tid=1
查看当前的并发连接数
http://10.1.1.22/status
结论:cpu成为瓶颈
php-cgi进程 32*10M ~= 350
nginx进程 2*20M ~= 40M
1、什么进程最活跃,消耗大量cpu <---php-cgi
用于编译php代码
解决:eAccelerator模块
2、前端增加squid作为静态元素的缓存。
静态元素的访问请求是有原始web服务的nginx来处理,所以增加squid只能起到很小的作用。
旧的常见的架构:
clients
|
squid <---启动缓存作用,只能针对文件服务器(附件服务)
|
nginx
缺点:所有动静请求都经过squid,squid会可能成为瓶颈。
不能缓存动态页面
如果强制缓存动态页面,会导致动页页面更新丢失,客户端看不到最新的页面。所以这种强制缓存只适合动态页面更新不频繁的文章系统。不适论坛。
或者使用动态页面静态化技术(只适合文章系统,不适合论坛)
新的架构
clients
|
nginx/haproxy <----调度
|
|-------------------|
nginx_web <-----> squid
3、针对nginx或者php-cgi进行调优,关闭不必要功能和模块,关闭不必要其他系统服务
考虑关闭压缩模块
如果非要压缩功能,一般也压缩:
txt,htm,html,css,js
不会去压缩: xml,rar,图片
如果服务器并发数太低,cpu还非常充裕:
允许nginx接受更多并发:
worker_connections 65535;
使用php-cgi进程自身的缓存功能
缺点:与强制打开squid动态页面缓存一样。
打开缓存 《--- 减少运算,减少IO
有缓存,就适当加大缓存
有队列,加大队列
如果cpu充裕,php-cgi返回503报错,可以打开更多的php-cgi进程
# vim /usr/local/etc/php-fpm.conf
<value name="max_children">32</value> // 内存超过4G,而且cpu充裕,可以64以上
<value name="rlimit_files">204800</value>
<value name="max_requests">65535</value>
备忘:
双网卡绑定