我在LAMP服务器上有一个WordPress博客。我必须在短时间内向WordPress应用编程接口发出20.000个POST请求才能创建帖子(我从其他内容管理系统迁移到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个请求之后,负载再次变高。
发布于 2021-02-07 03:57:45
Apache进程来处理请求:假设你正在使用MPM,你可以按照官方文档进行调优。(https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers)访问日志和错误日志可能会帮助你找出发生了什么。
问题可能出在其他地方,例如在数据库上:可能没有调整到处理WP生成的负载,以存储您想要保存的调用API的信息。
此外,您可以尝试降低脚本调用api的频率,而不是调优apache/mysql/mariadb/postgreSQL。你可以试着降低
发布于 2021-02-07 06:11:26
你有这么多进程,因为这是apache被告知的行为方式。提供的链接@Inc0将为您提供一些如何限制使用的线索。为了获得更快的恢复时间,您应该设置较低的MaxSpareServers。
,平均负载为15
如果您的负载高于CPU线程的数量,那么内核将开始抢占进程--这意味着您的吞吐量将会下降。多少,我真的不能说。但是,如果这是一次性的练习,您准备花费多少时间和精力让它运行得更快,而不仅仅是加载数据/降低效率?
我运行我的迁移脚本
这是多线程的/使用curl_multi-*函数吗?我不希望单线程操作会导致如此多的持久负载。你会从mod_status得到很多关于发生了什么的线索。无论如何,您似乎没有在客户端使用keepalive (或者在服务器上禁用了它)。在两端启用此功能应该会对负载/性能产生重大影响。
从其他云服务器迁移到WordPress的
I
这就是XY问题。
Wordpress非常慢,而且占用大量资源。你最大的胜利将来自于绕过Wordpress,直接将数据写入数据库。第二个最好的方法是使用Wordpress中内置的批量导入功能(它也会导出,因此您可以看到数据结构)。作为Wordpress,也有几个第三方插件可以使用(但请在完成导入后卸载该插件。
https://stackoverflow.com/questions/65997839
复制相似问题