这是我的Nginx.conf(我更新了配置,以确保没有涉及 PHP或任何其他瓶颈):
user                Nginx;
worker_processes    4;
worker_rlimit_nofile 10240;

pid                 /var/run/Nginx.pid;

events
{
    worker_connections  1024;
}

http
{
    include             /etc/Nginx/mime.types;

    error_log           /var/www/log/Nginx_errors.log warn;

    port_in_redirect    off;
    server_tokens       off;
    sendfile            on;
    gzip                on;

    client_max_body_size 200M;

    map $scheme $PHP_https { default off; https on; }

    index index.PHP;

    client_body_timeout   60;
    client_header_timeout 60;
    keepalive_timeout     60 60;
    send_timeout          60;

    server
    {
        server_name dev.anuary.com;

        root        "/var/www/virtualhosts/dev.anuary.com";
    }
}

我使用http://blitz.io/play来测试我的服务器(我买了10 000个并发连接计划).在30秒的跑步中,我获得964次点击和5,587次超时.当并发用户数为200时,第一次超时发生在测试的40.77秒.

在测试期间,服务器负载是(最高输出):

PID USER      PR  NI  VIRT  RES  SHR S %cpu %MEM    TIME+  COMMAND                                                               20225 Nginx     20   0 48140 6248 1672 S 16.0  0.0   0:21.68 Nginx                                                                  
    1 root      20   0 19112 1444 1180 S  0.0  0.0   0:02.37 init                                                                   
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                               
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 migration/0

因此,它不是服务器资源问题.之后怎么样了?

更新2011 12 09 GMT 17:36.

到目前为止,我做了以下更改,以确保瓶颈不是TCP / IP.添加到/etc/sysctl.conf:

# These ensure that TIME_WAIT ports either get reused or closed fast.
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
# TCP memory
net.core.rmem_max = 16777216
net.core.rmem_default = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

更多调试信息:

[root@server node]# ulimit -a
core file size          (blocks,-c) 0
data seg size           (kbytes,-d) unlimited
scheduling priority             (-e) 0
file size               (blocks,-f) unlimited
pending signals                 (-i) 126767
max locked memory       (kbytes,-l) 64
max memory size         (kbytes,-m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes,-p) 8
POSIX message queues     (bytes,-q) 819200
real-time priority              (-r) 0
stack size              (kbytes,-s) 10240
cpu time               (seconds,-t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes,-v) unlimited
file locks                      (-x) unlimited

注意,worker_rlimit_nofile设置为10240 Nginx config.

更新2011 12 09 GMT 19:02.

看起来我做的更改越多,它就越糟糕,但这里是新的配置文件.

user                Nginx;
worker_processes    4;
worker_rlimit_nofile 10240;

pid                 /var/run/Nginx.pid;

events
{
    worker_connections  2048;
    #1,353 hits,2,751 timeouts,72 errors - Bummer. Try again?
    #1,408 hits,727 timeouts - Maybe you should increase the timeout?
}

http
{
    include             /etc/Nginx/mime.types;

    error_log           /var/www/log/Nginx_errors.log warn; 

    # http://blog.martinfjordvald.com/2011/04/optimizing-Nginx-for-high-traffic-loads/
    access_log              off;

    open_file_cache         max=1000;
    open_file_cache_valid   30s;

    client_body_buffer_size 10M;
    client_max_body_size    200M;

    proxy_buffers           256 4k;
    fastcgi_buffers         256 4k;

    keepalive_timeout       15 15;

    client_body_timeout     60;
    client_header_timeout   60;

    send_timeout            60;

    port_in_redirect        off;
    server_tokens           off;
    sendfile                on;

    gzip                    on;
    gzip_buffers            256 4k;
    gzip_comp_level         5;
    gzip_disable            "msie6";



    map $scheme $PHP_https { default off; https on; }

    index index.PHP;



    server
    {
        server_name ~^www\.(?P<domain>.+);
        rewrite     ^ $scheme://$domain$request_uri? permanent;
    }

    include /etc/Nginx/conf.d/virtual.conf;
}

更新2011 12 11 GMT 20:11.

这是测试期间netstat -ntla的输出.

https://gist.github.com/d74750cceba4d08668ea

更新2011 12 12格林威治标准时间10:54.

只是为了澄清,iptables(防火墙)在测试时关闭了.

更新2011 12 12 GMT 22:47.

这是sysctl -p | grep mem dump.

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 8388608 8388608 8388608
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.route.flush = 1
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_max = 8388608
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

更新2011 12 12 GMT 22:49

我正在使用blitz.io来运行所有测试.我正在测试的URL是http://dev.anuary.com/test.txt,使用以下命令: – region ireland –pattern 200-250:30 -T 1000 http://dev.anuary.com/test.txt

更新2011年12月13日GMT 13:33

Nginx用户限制(在/etc/security/limits.conf中设置).

Nginx       hard nofile 40000
Nginx       soft nofile 40000
您将需要在测试期间转储网络连接.虽然服务器可能接近零负载,但您的TCP / IP堆栈可能正在计费.在netstat输出中查找TIME_WAIT连接.

如果是这种情况,那么您将需要检查与TCP等待状态,TCP回调和类似度量相关的调优tcp / ip内核参数.

此外,您还没有描述正在测试的内容.

我总是测试:

>静态内容(图像或文本文件)
>简单的PHP页面(例如PHPinfo)
>申请页面

这可能不适用于您的情况,但是我在性能测试时会这样做.测试不同类型的文件可以帮助您查明瓶颈.

即使使用静态内容,测试不同大小的文件也很重要,以便获得超时和其他指标.

我们有一些静态内容Nginx盒子处理3000个活动连接.所以Nginx当然可以做到.

更新:
您的netstat显示了很多打开的连接.可能想尝试调整TCP / IP堆栈.另外,你要求什么文件? Nginx应该快速关闭端口.

以下是对sysctl.conf的建议:

net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

这些值非常低,但我在高并发Nginx盒子上取得了成功.

centos – 200个并发连接后NGINX超时的更多相关文章

  1. 如何在Xcode 4.4.1中的Core Data Model编辑器中完全删除实体描述

    用户界面中只存在“添加实体”按钮.解决方法>突出显示要删除的实体.>按退格键(删除)键.

  2. xcode – 命令行工具的静态分析器问题

    我们通过使用TeamCity/命令行工具自动化我们当前项目的构建.为了确保尽可能多地捕获潜在的问题,我们已经将项目设置为对每个构建使用静态分析器.几个第三方课程被分析仪标记,所以我们排除了可疑类,标记为:一切都按照预期的方式编译在Xcode中(用4.6.3和5.0.1测试).但是,当在TeamCity服务器上编译时,我们会收到每个排除的第三方文件的以下错误:如果我们删除了-Xanalyzer-an

  3. 在Swift中应用Grand Central Dispatch 下

    通过使用dispatch_barrrier和dispatch_sync,你做到了让PhotoManager单例在读写照片时是线程安全的。还有,使用dispatch_async异步执行cpu密集型任务,从而为视图控制器初始化过程减负。幸运的是,dispatchgroups就是专为监视多个异步任务的完成情况而设计的。调度组调度组在一组任务都完成后会发出通知。在组内所有事件都完成时,GCDAPI提供了两种方式发送通知。打开PhotoManager.swift,替换downloadPhotosWithComple

  4. OS开发实践:用Swift和Core Animatoin创建圆形图片加载动画

    http://www.csdn.net/article/2015-06-11/2824932

  5. Swift 2 版 Core Data 封装库

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 安卓工作室在设置杰克逊分析器时遇到麻烦

    解决方法加在你的build.gradle中.

  7. android – multiproject gradle build error:包不存在

    使用gradle构建多项目时遇到一些问题.我读了所有类似的问题但没有任何帮助.我的项目结构如下:应用/settings.gradle应用程序/应用/的build.gradle应用程序/库/核心/核心/的build.gradle应用程序/库/核心/库/ZBarLibrary/的build.gradleApp目录中的命令“gradlebuild”生成错误:“packagecom…不存在”.这个包在ap

  8. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. Vue项目打包并部署nginx服务器的详细步骤

    vue项目开发好之后需要部署到服务器上进行外网访问,下面这篇文章主要给大家介绍了关于Vue项目打包并部署nginx服务器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  10. ubuntu中利用nginx部署vue项目的完整步骤

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行,下面这篇文章主要给大家介绍了关于ubuntu中利用nginx部署vue项目的相关资料,需要的朋友可以参考下

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部