[英]Why Apache spawns too much processes?
我的 LAMP 服务器上有一个 WordPress 博客。 我必须在短时间内向 WordPress API 发出 20.000 个 POST 请求才能创建帖子(我从其他 CMS 迁移到 WordPress)。
为此,我运行我的迁移脚本,它需要点击https://example.com/wp-json/wp/v2/posts
端点 20.000 次。 在 ~1000 次请求后,我的服务器速度变慢,平均负载变为15
。 当我检查top
时,这就是我得到的:
5827 www-data 20 0 943612 73000 33424 S 4.7 3.6 0:24.62 apache2
5828 www-data 20 0 943960 79112 38768 S 4.0 3.9 0:16.26 apache2
5861 www-data 20 0 944280 86568 45968 S 4.0 4.3 0:06.47 apache2
6047 www-data 20 0 943692 77288 37292 S 3.7 3.8 0:00.46 apache2
5835 www-data 20 0 942212 85760 47096 S 3.3 4.2 0:05.01 apache2
27086 mysql 20 0 1208472 187212 21124 S 3.0 9.3 18:52.19 mysqld
5863 www-data 20 0 944452 103896 64936 S 2.7 5.1 0:06.97 apache2
5826 www-data 20 0 942604 102272 63264 S 2.0 5.1 0:06.66 apache2
5854 www-data 20 0 944252 84776 46180 S 1.3 4.2 0:06.96 apache2
5967 www-data 20 0 941856 82388 44128 S 1.3 4.1 0:03.98 apache2
6046 www-data 20 0 943692 77476 37356 S 1.3 3.8 0:00.51 apache2
5860 www-data 20 0 942224 84668 46048 S 0.7 4.2 0:06.93 apache2
6059 www-data 20 0 941644 75192 37164 S 0.7 3.7 0:00.20 apache2
当我停止迁移脚本时,这些进程仍在运行,并且高服务器负载保持在相同的值(大约15
)。 唯一有帮助的是sudo apachectl restart
。 但后来我重置了 apache2,再次运行迁移脚本,然后在 1000 个请求加载 go 后再次高。
Apache spawns process to handle requests: assuming you're using MPM, you can tune it following the official documentation.( https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers ) Access logs and error日志可能会帮助您了解正在发生的事情。
问题可能出在其他地方,例如在数据库上:也许它没有经过调整来处理 WP 正在生成的负载来存储您想要保存的调用 API 的信息。
此外,您可以尝试降低脚本调用 api 的频率,而不是调整 apache/mysql/mariadb/postgreSQL。 您可以尝试降低
你有这么多进程,因为这就是 apache 被告知的行为方式。 @Inc0 提供的链接将为您提供一些如何限制使用量的线索。 为了更快的恢复时间,您应该设置较低的 MaxSpareServers。
平均负载达到 15
如果您的负载高于 CPU 线程数,则 kernel 将启动抢占进程 - 这意味着您的吞吐量将下降。 多少,我真的不能说。 但是,如果这是一次性练习,您准备花多少时间和精力将其更快地升级到 go,而不是仅仅继续加载数据/降低效率?
我运行我的迁移脚本
这是多线程/使用 curl_multi-* 函数吗? 我不希望单线程操作会导致如此多的持久负载。 你会从 mod_status 中得到很多关于发生了什么的线索。 无论如何,您似乎没有在您的客户端中使用keepalive(或在您的服务器上禁用它)。 在两端启用此功能应该会对负载/性能产生重大影响。
我从其他 CMS 迁移到 WordPress
所以这就是XY问题。
Wordpress 非常慢且资源繁重。 您最大的胜利将来自绕过 Wordpress 并将数据直接写入数据库。 第二好的方法是在 Wordpress 中使用内置的批量导入 function (它也导出,因此您可以看到数据结构)。 作为Wordpress,还有几个第三方插件可以使用(但是请在导入完成后卸载插件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.