php-fpm优化

php-fpm的优化需要根据业务的实际来做出调整,首先必须确认业务请求是密集型,还是松散型,不通请求模式导致php-fpm的优化策略不一样。线上的php-fpm最好一段时间优化一次,以达到服务器的高负载。

什么是PHP-FPM?为什么会导致高负载?

PHP-FPM是PHP FastCGI流程管理器。这是一个FastCGI守护程序,它允许网站处理高负载。但是有时此服务本身会导致高负载。

为了调试该问题,我们要做的第一件事是检查PHP-FPM错误日志,该日志位于“ /var/log/php7.0-fpm.log”等位置。

错误日志的位置因安装路径和PHP版本而异。在检查错误日志时,我们发现了一些类似的警告。

[12-Nov-2018 11:12:11] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 9 idle, and 89 total children

此消息表示PHP-FPM池非常繁忙,无法使用现有配置参数来处理高流量。

由于许多原因,PHP-FPM可能导致高服务器负载:

  1. 由于高流量或攻击而导致正在运行的进程过多
  2. 滥用相关服务,例如MySQL或Web服务器
  3. PHP-FPM配置未正确映射到可用服务器资源
  4. 编码不良或错误的应用程序滥用服务器资源

配置和管理Web服务器以获得最佳性能是我们的主要任务,分析并解决服务器负载过高的原因,这是服务的一部分。

如何执行PHP-FPM调整以实现高负载

服务器所有者倾向于立即修复的第一件事是重新启动PHP-FPM服务。但是,仅重新启动服务只是一个临时解决方案,您很快就会发现负载激增。

在调试此类负载问题时,我们会分析一段时间内的日志和服务器性能。这有助于我们查明罪魁祸首并采取迅速的行动加以纠正。

1.切换PHP-FPM的工作方式

PHP-FPM主要分为三种类型:动 dynamic, ondemand和static.。服务的性能根据这种类型而大大不同。

在dynamic类型中,子进程数是根据conf文件中的PHP-FPM参数动态设置的。但这是一种占用大量内存的类型。

在static类型中,子进程的数目由pm.max_children参数固定,但是对于Web流量不断变化的服务器,此类型不灵活。它还消耗过多的内存。

在ondemand类型中,基于流量仅按需生成PHP-FPM进程。此类型有助于管理受内存限制的服务器中的各种流量。但是,当流量波动很大时,开销会增加。

在评估可用服务器内存,流量高峰,网站页面,CPU使用率等之后,确定PHP-FPM的工作方式。

2.调整PHP-FPM参数

PHP-FPM具有许多配置参数,这些参数决定了它的执行方式。必须根据可用的服务器资源(例如RAM和CPU)确定这些参数。

例如,服务器中运行的总进程数大约为=(总RAM /每个进程的内存)。在具有多个服务的服务器中,所有这些服务都将在调整过程中考虑在内。

根据服务路径,PHP / FPM配置文件将位于/etc/php-fpm.conf或其他位置。该文件的内容如下所示:

listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 150

我们为性能调整的一些主要参数是:

    1. pm.max_children –用于设置允许的子进程总数
    2. pm.start_servers –在启动时创建的子进程的数量由此定义
    3. pm.min_spare_servers –定义空闲进程的最小数量
    4. pm.max_spare_servers –设置最大空闲服务器进程数
    5. pm.process_idle_timeout –空闲进程将处于活动状态的秒数
    6. pm.max_requests –设置每个子进程的执行时间,并用于减少内存泄漏。

服务器所有者经常犯的一个常见错误是,为这些参数设置很高的值,以获得最佳性能。但是,如果没有足够的资源,那么高的值可能会使服务器崩溃。

首先根据服务器资源,网站流量和网站内容确定“ pm.max_children”参数的值。然后在进一步测试中得出其他参数。

3.启用慢日志

如果参数很好,但怀疑某个应用程序或站点会导致高负载,则在PHP-FPM中启用慢速日志选项。

request_slowlog_timeout = 6s
slowlog = /var/log/php-fpm/slowlog-site.log

在PHP-FPM配置文件中为“ slowlog”参数提到的日志文件记录了执行时间超过6秒的请求。

分析这些请求使我们能够跟踪和修复服务器中资源密集的请求和应用程序。

4.管理池

PHP-FPM可以选择为单独的应用程序配置多个资源池。这有助于包含每个应用程序的资源并提高安全性。

通过基于池配置参数,我们限制了单个池用尽所有服务器资源。删除未使用的池以进行进一步管理。

PHP-FPM调整以实现高负载–一个持续的过程!

调整PHP-FPM以获得最佳性能,不是一个临时的修复。服务的配置和参数将根据服务器的需求和资源而有所不同。

在高峰流量期间,性能可能会与正常时间有所不同。因此,在进行了调整之后,我们进行了压力测试,以查看服务在高负载期间的性能。

根据压力测试过程中的服务器性能,我们会对服务进行进一步的微调。我们还将监视服务器负载一段时间,以确保所做的更改确实有所帮助。

调整PHP-FPM后减少CPU负载

在这种情况下,我们可以通过执行PHP-FPM调整来大大减少服务器负载。

但是,在某些情况下,例如MySQL或Web服务器也是罪魁祸首,仅PHP-FPM调优可能无济于事。在这些情况下,我们将执行其他任务,例如:

  • 微调MySQL服务器和Web服务器,例如Apache和Nginx
  • 根据服务,应用程序,用户等限制服务器资源,以避免服务器崩溃
  • 设置负载均衡器或群集以在高流量服务器中分发服务
  • 监视服务器24/7并进行定期服务器审核,以发现并解决当时和之后的问题
  • 启用页面缓存并优化代码和查询,以避免应用程序使服务器过载

结论

解决由于PHP-FPM服务引起的高负载问题。全天候监控服务器性能,并定期进行服务器调整,以确保服务器负载保持正常。

chrome插件Vimium-黑客的浏览器
linux alias命令
Tags:,