在嵌入式设备中使用php,php-fpm占用很高的CPU

发布于 2022-08-29 18:13:24 字数 517 浏览 13 评论 0

目前手头上现在有个项目,是在一个装有linux系统的嵌入式设备里面跑一个网站。

设备的CPU是RAM结构,单核,1GB。

我们在系统里面架设了Apache+Mysql+php,然后写个网站,放在里面运行。感觉有点类似于路由器里面那个web页面的设置程序,但是我们那是个完整的网站应用。

php在设备上运行的很慢,但是通过合并php文件(减小IO),使用apc(缓存opcode和一些数据和页面),访问速度有所提升。

但是,每次访问设备里面的网站时,php-fpm的cpu能瞬间占用到40%左右,不访问页面后cpu占用会降下来。因为设备中还运行了一下其他服务和程序,当php-fpm占用过多cpu后,会引起其他程序出现问题。

为什么php-fpm会占用那么多cpu?apache也没有占多少,有没有办法让cpu降下来。

本来有想过用一些嵌入式的web服务器,但是感觉cpu占用不是apache的问题,是php的问题,不知道如何处理。友友们又没有什么建议和想法?

PS:设备中的网站只有一个用户访问也会这样。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木森分化 2022-09-05 18:13:24

如果apache,mysql,php什么的都挤在一个嵌入式设备里,很可能是内存不够了或者是缓存的空间被挤占,导致每次访问都会触发大量page fault。

另一种可能是pm设置成了ondemand或其他非固定算法,使得php-fpm不断花时间启动新的php进程。

我没记错的话,PHP-FPM收到请求后,默认会循环在worker列表里找下一个空闲的worker,而不是重用旧的。如果你开了10个worker,可能新worker已经给交换出内存了。

建议降低php-fpm spawn的worker数量。对于单核处理器,mysql又部署在同一设备上的情况,甚至一个worker就够了。(无需I/O等待的时候,开再多的worker也只是瓜分早就100%占用的CPU而已,还会创造无谓的context switch。)

嵌入式要用apache + php建议直接用mod_php。可能的话换成lighttpd + php-fcgi应该更快。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文