当前位置:首页 > CN2资讯 > 正文内容

[效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。nginx内核参数优化

2天前CN2资讯

背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核:

零)Nginx:

error_log /data/logs/nginx_error.log notice;

#Specifies the value for maximum file descriptors that can be opened by this process.

worker_rlimit_nofile 51200;

PHP:

我的1g测试机,开64个是最好的,建议使用压力测试获取最佳值

rlimit_files = 30000

[www]

request_slowlog_timeout = 2

slowlog = /data/logs/php/slow.log

pm.max_children = 64

—————————————————————加上下面的内核优化———————————————————————————

一)nginx 高并发参数配置linux内核参数优化

(1) vi /etc/sysctl.conf CentOS5.5中可以将所有内容清空直接替换为如下内容:

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_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 4096 87380 4194304

net.ipv4.tcp_wmem = 4096 16384 4194304

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog = 262144

net.core.somaxconn = 262144

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 30

net.ipv4.ip_local_port_range = 1024 65000

使配置立即生效可使用如下命令:

/sbin/sysctl -p

(2)关于系统连接数的优化:

linux 默认值 open files 和 max user processes 为1024

#ulimit -n

1024

#ulimit –u

1024

问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024个用户进程

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。

新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。

解决方法:

使用 ulimit –n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit-n 65535 ,-S 指soft ,-H 指hard)

有如下三种修改方式:

1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535

2. 在/etc/profile 中增加一行 ulimit -SHn 65535

3. 在/etc/security/limits.conf最后增加:

* soft nofile 65535

* hard nofile 65535

* soft nproc 65535

* hard nproc 65535

具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2种有效果

# ulimit -n

65535

# ulimit -u

65535

备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制

soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。 soft 限制不能设置的比hard 限制更高。 只有 root 用户才能够增加 hard 限制值。

(3)对nginx作cpu亲和性绑定:

worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000;

我的:

worker_processes  12;

worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000 0001 0010 0100 1000; 

二)PHP-FPM高负载解决办法(我的1g测试机,开64个是最好的,建议使用压力测试获取最佳值):

1.尽量少安装PHP模块,最简单是最好(快)的

2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);

2.把您的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以

注:我的1g测试机,开64个是最好的,建议使用压力测试获取最佳值

3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;

3.使用socket连接FastCGI,linux操作系统可以放在 /dev/shm中

注:在php-fpm.cnf里设置<value name=”listen_address”>/tmp/nginx.socket</value>就可以通过socket连接FastCGI了,/dev/shm是内存文件系统,放在内存中肯定会快了.记得这时也要在nginx里的配置里进行修改,保持一致.

location ~ .*\.(php|php5)?$

{

#将Nginx与FastCGI的通信方式由TCP改为Unix Socket。TCP在高并发访问下比Unix Socket稳定,但Unix Socket速度要比TCP快。

fastcgi_pass  unix:/tmp/php-cgi.sock;

#fastcgi_pass  127.0.0.1:9000;

fastcgi_index index.php;

include fcgi.conf;

}

摘自:http://www.blogjava.net/tbwshc/archive/2012/08/16/385599.html

三)nginx与php-fpm 打开文件过多(Too many open files)Too many open files

经过第2)步sysctl -p设置后,一般不会出现上面第三)的问题:

[root@jackxiang conf]# ulimit -Hn

65535

[root@jackxiang conf]# ulimit -Sn

65535

PHP-FPM配置文件:

rlimit_files = 30000

NGINX配置文件:

# set open fd limit to 30000

worker_rlimit_nofile 30000;

以下是上面的详细解决方案:

操作系统

先查看 Linux (Cent Os)的文件打开限制

ulimit -Hn

ulimit -Sn

-H 为 Hard 解释为硬件 -S 为 Soft 为软件。 具体意义不是很明。

先去修改 /etc/sysctl.conf

添加或者修改

fs.file-max = 70000

修改 /etc/security/limits.conf

添加或修改

<user>   soft    nofile   10000

<user>   hard    nofile   30000

后面的 10000,30000可以根据需要调整,至于 可以根据需要修改为 对应要扩大文件打开数 的用户,

这里 因为我要处理 nginx 和 php-fpm 2个服务对应的2个用户,图方便 就使用了 * ,意思就是 所有用户。

重载 sysctrl配置

sysctl -p

PHP-FPM

修改 /etc/php-fpm.d/www.conf

添加/修改

rlimit_files = 30000

数字随意,当然要低于OS的设置。

NGINX

修改 /etc/nginx/nginx.conf

最外层 我是跟在 worker_processes 之后

添加或者修改

# set open fd limit to 30000

worker_rlimit_nofile 30000;

调试测试

重启 nginx, php-fpm

重新登录OS

使用 ulimit 查看当前的 限制,看是否改好了

同时 使用

lsof | wc -l

统计当前打开文件的数量,如果低于你的上限,就满足吧,记得高峰时候来查看下,随时调整你的ulimit上限。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/19014.html

    分享给朋友:

    “[效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。nginx内核参数优化” 的相关文章

    测试IP地址的重要性与常用工具推荐

    在网络管理中,测试IP地址的重要性不可忽视。每当我遇到网络问题,测试IP地址就成了第一步。了解IP地址的状态和性能,不仅能帮助我找到问题所在,还能快速解决网络故障。这就像是医生给病人做检查,只有找出病因,才能对症下药。 我们在进行网络操作时,IP地址就像每台设备的身份名片。借助一些功能强大的工具,我...

    检查自己的IP地址:全面掌握网络安全与故障排查技巧

    检查自己的IP地址的重要性 我常常感受到,了解自己的IP地址是使用互联网时不可或缺的一部分。无论是日常上网还是进行复杂的网络设置,IP地址都扮演着关键角色。所以,搞清楚自己的IP地址,真的非常重要。 那么,什么是IP地址呢?简单来说,IP地址是分配给每台连接到互联网设备的唯一标识符。它就像我们的家庭...

    Cloudflare 菲律宾节点:提升网络体验与速度的解决方案

    在当今数字化时代,每一个在线体验都至关重要。CloudFlare的出现,正是为了满足这一迫切的需求。作为全球知名的CDN(内容分发网络)服务提供商,CloudFlare不仅致力于加速网站的加载速度,也为用户提供安全防护服务。借助全球分布的节点,CloudFlare能够将用户请求快速而安全地送达目的地...

    GPU租用市场的崛起与行业应用分析

    在过去的几年中,GPU租用市场的发展速度让我惊叹,真的如雨后春笋般冒出。随着科技的不断进步和市场需求的增长,越来越多的人选择租用GPU来满足高性能计算的需求。这种选择不仅适用于企业,也吸引了许多个人用户。GPU租用为我们提供了便利,加速了各类计算密集型任务的完成。 GPU租用的定义非常简单,就是将高...

    BBR加速开启:提升网络性能的最佳实践

    什么是BBR? 在网络领域,BBR(Bottleneck Bandwidth and Round-trip propagation time)是一个备受关注的TCP拥塞控制算法,由Google开发的这一技术,旨在提升网络连接的传输速率和稳定性。BBR独特之处在于,它通过实时监测数据包的传输时延与丢包...

    GPU租用服务:灵活、高效、经济的计算解决方案

    在今天的科技世界里,GPU租用服务正逐渐成为一种流行的趋势。这种服务允许用户通过云计算平台租用高性能的图形处理单元(GPU),从而完成需要大量计算的任务,比如深度学习、3D渲染或者其他复杂的数据处理。对于很多个人用户或小企业而言,直接购买这些昂贵的硬件并不现实,租用的方式显得更加灵活和经济。 借助G...