为什么Apache生成太多进程?



我的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个请求后负载又变高了。

Apache生成处理请求的进程:假设您正在使用MPM,您可以根据官方文档对其进行调优(https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers)。访问日志和错误日志可以帮助您了解发生了什么。

问题可能在其他地方,例如在数据库上:也许它没有调整到处理负载,WP正在生成以存储您想要保存调用api的信息。

此外,你可以尝试降低脚本调用api的频率,而不是调优apache/mysql/mariadb/postgreSQL。你可以试着降低

您有这么多进程,因为这是apache被告知的行为。提供的@Inc0链接将为您提供一些如何限制使用的线索。为了更快的恢复时间,您应该设置较低的MaxSpareServers。

,平均负载为15

如果您的负载高于CPU线程数,那么内核将开始抢占进程——这意味着您的吞吐量将下降。具体有多大,我也说不清。但是,如果这是一次性的练习,您准备花费多少时间和精力来使它运行得更快,而不是继续加载数据/降低效率?

我运行迁移脚本

这是多线程/使用curl_multi-*函数吗?我不希望单线程操作导致如此多的持久负载。您可以从mod_status中获得很多关于正在发生什么的线索。无论如何,看起来您没有在客户端中使用keepalive(或者在服务器上禁用了keepalive)。在两端启用此功能应该会对Load/性能产生重大影响。

我从其他CMS迁移到WordPress

这是XY问题

Wordpress是非常缓慢和资源繁重的。你最大的胜利将是绕过Wordpress,直接将数据写入数据库。其次是使用Wordpress内置的批量导入功能(它也可以导出,所以你可以看到数据结构)。作为Wordpress,你也可以使用一些第三方插件(但是当你完成导入后请卸载插件)。

最新更新