nginx io瓶颈问题

痴汉 发布于 2014/03/10 16:54
阅读 4K+
收藏 5

目前我有几个站大概十几万ip,pv三四百万左右,之前是分成好几台iis服务器,由于网站大部分是生成的静态页面,考虑到nginx对静态页面的优秀的表现,所有就进行了更换,把前后台分离,后台用一台服务器安装server 2008 ii7,前台单独用一台 Dual Xeon E5410 16GB   CentOS 6 x86_64  Nginx

现在发现前台linux服务器到了高峰期的时候,几个网站打开速度都非常慢,查看服务器内存跟cpu均使用的非常少,但是io非常高

像目前这个情况,我在网上查了,有两种办法,一种是换ssd硬盘的服务器,

一种是把网站的一些经常访问的网页加载到内存中。

第一种,我查了,ssd的服务器基本没有,有也只是有些vps,配置都不咋滴。

第二种,不会弄啊,有什么其他的处理方法没?

我最大并发才1万左右,我就纳闷了,我看到很多人拿nginx测试,随随便便一个低端的服务器都可以抗起三四万并发,我才一万左右,而且服务器还是买的比较好的了,都抗不住。表示不解!!!

贴上我的配置文件:

user  www www;
worker_processes 8;
#worker_cpu_affinity auto;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_rlimit_nofile 65535;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections  20480;
}

http {
    server_names_hash_bucket_size 512;  
    server_names_hash_max_size 512;
    include       mime.types;
    default_type  application/octet-stream;


    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';


    #access_log  logs/access.log  main;


     sendfile        on;
    tcp_nopush     on;


    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay on;
    server_tokens off;
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types    text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    
    include vhost/*.conf;

vhost 里面的网站的配置

server {

listen       80;
server_name www.xxx.com *.xxx.com;
  location / {
  root /home/wwwroot/xxx.com;
error_page  404  /404.html;
error_page  500 502 503 504  /50x.html;
}
}

加载中
1
linan
linan
刚看了一下图,内存使用率很高了。考虑加内存nginx依赖操作系统的disk cache。
0
eechen
eechen
你的磁盘sda使用率(%util)满载100%,Nginx没有遇到瓶颈,磁盘I/O遇到瓶颈了。

建议你用iotop和pidstat看看到底是nginx还是  rsync 同步造成的磁盘I/O繁忙: 
iotop 
pidstat -d -p Nginx_Worker_PID 1  

我觉得更有可能是rsync,因为你的磁盘写太频繁了,Nginx日志不至于如此。
eechen
eechen
回复 @痴汉 : 压力测试主要集中在单个文件,而系统是有磁盘缓存的,这种压力测试不会出现磁盘I/O瓶颈。
痴汉
痴汉
我不解的是,为什么,我才一万左右的并发,就到io瓶颈了!人家,随便测试几万并发,都没出现io瓶颈啊!!!
痴汉
痴汉
就是io瓶颈啊,这个要怎么解决啊!有什么好的办法没啊!!! 早知道,我就没必要整这么好配置的服务器了!!
0
hylent
hylent
varnish ?
hylent
hylent
回复 @痴汉 : 不是说varnish就是把常用的放到内存里么。。 没试过,我就是问问。
痴汉
痴汉
我是通过rsync软件直接把html网页同步到linux服务器上的,静态页面直接在linux服务器,没必要用varnish做缓存了吧???
0
七念
七念
前端用redis作一下缓存....
痴汉
痴汉
redis做缓存不会,百度了下,好像相关资料也比较少!!
0
景愿
景愿
网站文件大不大,全部搬入系统的shm目录下,风一样的速度;
哈哈__哈哈
哈哈__哈哈
回复 @痴汉 : 静态文件有这么大?100G太吓人了吧
痴汉
痴汉
内存16G,但是所有的静态文件不止16g啊,大概有一百g左右!百度到一个什么大师说的理论,说五分钟内重复访问的页面全放到内存里,但是这个要怎么判断啊,有没有类似的软件来进行处理!
0
滔哥
滔哥
既然全是静态  前端加个varnish
痴汉
痴汉
照目前看,只有这个办法了!去试试吧!谢谢各位!!!
0
zoowii
zoowii
缓存文件到/dev/shm中
0
痴汉
痴汉

引用来自“eechen”的答案

你的磁盘sda使用率(%util)满载100%,Nginx没有遇到瓶颈,磁盘I/O遇到瓶颈了。

建议你用iotop和pidstat看看到底是nginx还是  rsync 同步造成的磁盘I/O繁忙: 
iotop 
pidstat -d -p Nginx_Worker_PID 1  

我觉得更有可能是rsync,因为你的磁盘写太频繁了,Nginx日志不至于如此。

这是iotop的结果,rsync同步我只定时晚上凌晨的时候同步,那个时候,访问的人少!

0
痴汉
痴汉

引用来自“eechen”的答案

你的磁盘sda使用率(%util)满载100%,Nginx没有遇到瓶颈,磁盘I/O遇到瓶颈了。

建议你用iotop和pidstat看看到底是nginx还是  rsync 同步造成的磁盘I/O繁忙: 
iotop 
pidstat -d -p Nginx_Worker_PID 1  

我觉得更有可能是rsync,因为你的磁盘写太频繁了,Nginx日志不至于如此。

我通过添加SNMP统计出io,发现时间读取写入也不高啊,最大值才几m每秒。

不知道,为什么,流量一大,还是会很慢,有时打开一个页面,要七八秒,十来秒!

我百度查了希捷ST31500341AS这个硬盘,读写速度不至于这么弱吧!!!

0
Brin想写程序
Brin想写程序

用ramdisk,把文件放在内存虚拟出来的磁盘上。再来个rsync同步到linux的ramdisk盘的挂载目录。



 mkdir /RamDISK

 mount -t ramfs none /RamDISK

返回顶部
顶部