文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php Nginx服务器占满

2023-09-18 09:49

关注

解决方案

PHP FastCGI Process Manager (PHP-FPM) 和 Nginx 是一种常见的服务器架构方案,如果您的 PHP-FPM 进程在投流期间遇到高并发请求(如 300000 个请求),会导致服务器 CPU 占用过高。
以下是一些可能的解决方案:

增加服务器的硬件资源。例如,升级使用更好的 CPU、内存和磁盘。

配置 PHP-FPM 进程池,将 max_children 和 max_requests 值增加到能够处理高并发请求的数量。在设置 max_children 上时,需要根据服务器的内存情况来进行设置,因为每个 PHP-FPM 进程占用一定的内存。

配置 Nginx 的 worker_processes 和 worker_connections 值以增加并发处理能力。

对于大型项目,最好使用缓存和其他优化技术来减轻服务器的负载,例如使用 CDN、浏览器缓存、Memcached 或 Redis 等。

值得注意的是,给 PHP-FPM 进程和 Nginx 工作进程分配太多内存会导致服务器内存不足,而给它们分配太少内存会导致请求无法正常处理。因此,您需要进行一些测试来找到最佳的配置方案。

max_children 和 max_requests

当您在PHP-FPM和Nginx服务器上遇到高并发请求时,您可以通过增加PHP-FPM进程和子进程池的max_children和max_requests参数的值,来处理这些请求。这两个参数可以在PHP-FPM池的配置文件(通常是php-fpm.conf或www.conf)中进行调整。

下面的步骤可以让你具体了解如何调整这些参数:

  1. 打开PHP-FPM池的配置文件(通常是php-fpm.conf或www.conf)。

  2. 查找并调整 max_children 参数。这是并发处理数。必须考虑服务器的可用资源,如内存、CPU和磁盘I/O。通常设置为服务器总RAM可用空间除以平均 PHP-FPM 进程占用的内存。

  3. 查找并调整 max_requests 参数。这是每个 PHP-FPM 进程处理请求的最大数量。此参数的目的是限制进程的生命周期并减少内存泄漏风险。一般来说,赋予该值越大,进程生命周期就越长,会消耗更多的 RAM。

  4. 保存配置文件更改,并重新启动 PHP-FPM 进程和 Nginx 工作进程以重新加载配置并生效。

您可以通过监控PHP-FPM池进程数和Nginx工作进程数的变化,来判断是否需要增加PHP-FPM进程和子进程池的max_children和max_requests参数的值,以便进一步优化服务器的处理能力。请注意,增加max_children值将增加服务器的并发负载,因此,您需要根据服务器的可用资源情况进行测试和调整。

worker_processes 和 worker_connections

Nginx 的 worker_processes 和 worker_connections 参数用于控制 Nginx 工作进程和每个工作进程打开的客户端连接数。通过增加这些参数的值,可以增加 Nginx 服务器的并发处理能力。

下面是具体的步骤:

  1. 打开 Nginx 的配置文件(通常是 nginx.conf 或者 vhost-conf 文件)

  2. 找到 worker_processes 和 worker_connections 参数,进行调整。其中,worker_processes 是 Nginx 工作进程的数量,通常建议将其设置为 CPU 核心数量或 CPU 核心数量的 2 倍,可以通过命令 grep -c processor /proc/cpuinfo 来查询 CPU 核心数量。worker_connections 则是每个 Nginx 工作进程可同时处理的客户端连接数,需要根据服务器的硬件资源进行调整。例如,如果您的服务器内存充足,可以将 worker_connections 设置为更大的值,如 1024。

  3. 保存并关闭文件,并重新加载配置。您可以通过运行 sudo nginx -t 命令来测试配置文件的语法是否正确,若无误,则运行 sudo systemctl reload nginx 来重载配置项。

注意:请注意,在增加 worker_processes 和 worker_connections 的值之前,您需要检查服务器的硬件资源,以确保它们有足够的处理能力和内存来处理更多的并发请求。同时,也需要确认您的 PHP-FPM 进程数和 Nginx 工作进程数是否匹配,以充分利用所有的硬件资源。

总之,适当的调整 worker_processes 和 worker_connections 参数可以为您的服务器提供更好的性能和更高的并发处理能力。建议您进行测试和实验以找到最适合您的服务器的值。

worker_processes

worker_processes 设置为 auto 是一个适用于大多数情况的良好实践,它可以让 Nginx 自动检测 CPU 的核心数并设置相应的工作进程数量。

nginx.conf 文件或 Nginx 虚拟主机配置文件中,你可以将 worker_processes 的值设置为 auto,如下所示:

worker_processes auto;

这意味着 Nginx 会自动检测 CPU 核心数量,然后为每个核心设置一个工作进程。

这种设置适用于大多数情况,因为它可以自动适应不同硬件环境,且不会导致过度分配资源。

不过,一些特殊情况下可能需要手动设置 worker_processes 的值,例如当你使用 Nginx 作为反向代理处理大量请求时,为了最大化利用硬件资源,你可能需要手动将 worker_processes 增加到更高的值。

worker_connections

worker_connections 控制每个工作进程可以同时处理的连接数,它的值应该考虑到服务器的硬件资源、预期的并发流量和应用程序的性能需求。通常,该值越高,可以同时处理的连接数就越多。

以下是一些建议来配置 worker_connections 的值:

  1. 根据硬件配置来设置:推荐使用硬件资源(例如 CPU、RAM、网络带宽)来定制 worker_connections 的值。通常来讲,在一般的云服务器环境下,一个工作进程应该配置不超过 2048 的并发连接数,而在高端服务器上可选择升高至 65535(即最大TCP连接数)。

  2. 根据预期的并发流量来设置:如果你预计会面对大量的并发流量,需要增加 worker_connections 的值,以防止连接队列排满导致请求堵塞。值的大小应该考虑整个系统能够负载的最大并发连接数,如果值过小,将限制最大并发连接数,如果值过大,会浪费大量的资源,同时可能导致连接被过早关闭或动态的增加系统负载,而导致资源耗尽。

  3. 根据应用程序的性能需求来设置:某些应用程序需要更高的 worker_connections 值来保证高性能,例如一个高吞吐量的视频流媒体应用程序或低延迟的实时应用程序。

需要注意的是,太小的 worker_connections 值可能导致连接被拒绝或连接队列排满而导致请求堵塞,而太大的则会导致过多的网络流量和资源消耗。

扩展

linux查找某个文件的命令

# 在根目录下查找文件www.conf,表示在整个硬盘查找find / -name www.conf

具体可以看我另一篇文章:
linux下的查找命令

来源地址:https://blog.csdn.net/qq_36303853/article/details/130989562

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯