网络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>

 

备忘:
双网卡绑定