求指点 PHP 内存泄露排查

2024-01-18 10:59:17 +08:00
 well775397252
线上 php-fpm 内存占用越来越高,运行 1 个月都占用 1 个多 G 的内存了,使用的是 php8.1+yii2 框架,看起来应该是有内存泄漏存在,想请教一下这种怎么排查?
3018 次点击
所在节点    PHP
29 条回复
encro
2024-01-18 17:52:58 +08:00
php 开启了 xdebug ,结巴词库,ip 地址库之类,为了提高性能,有些程序会将字典之类的加载的内存,很正常。
zhangqilin
2024-01-18 18:17:21 +08:00
内存满了不一定不会回收,你放到一台内存小点的机器上或者 pod 上,
比如 1 个月 1g ,你放到 500m 的上,然后压测看会不会 OOM
说不定内存占用过多了就会回收了
coderzhangsan
2024-01-18 20:17:33 +08:00
@well775397252 #20 平均每个进程 200 多 M ,fpm 配置里 pm.max_requests 设置的多少,如果设置的比较大,那有可能会增长到这个两级,把这个值适当降低就可以了;正常来讲 fpm 进程很难会内存溢出,除非一些占用内存的比较大的场景才会,例如大数据的导入和导出,又或者开启了 debug 等扩展,静态内存占用较大。
hahamy
2024-01-19 00:06:58 +08:00
每个 fpm 进程 200 多兆,200 多兆看的是哪个值? top 命令的内存有几个指标
Rorysky
2024-01-19 01:13:55 +08:00
不是什么关键业务就定时重启,有时间关注现实生活
NjcyNzMzNDQ3
2024-01-19 09:11:49 +08:00
xhprof +1 , 这个工具用堆栈排查每个方法占用内存大小、耗时、cpu 用量,我之前有 curl_util 忘记 close 就用的他
yc8332
2024-01-19 09:47:57 +08:00
要看你怎么重启 fpm 的,一直开着的话,如果你的请求中有需要大内存的,很正常。
lairdnote
2024-01-19 09:59:06 +08:00
xhprof. 或者跟踪进程 xstrace
alex8
2024-01-19 20:25:09 +08:00
Php 被发明时就有内存泄漏,7 以后已经好很多了。需要 max request 参数定期杀进程,不然多大的内存都能慢慢吃完

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1009607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX