求指点 PHP 内存泄露排查 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
well775397252
V2EX    PHP

求指点 PHP 内存泄露排查

  •  
  •   well775397252 Jan 18, 2024 3877 views
    This topic created in 833 days ago, the information mentioned may be changed or developed.
    线上 php-fpm 内存占用越来越高,运行 1 个月都占用 1 个多 G 的内存了,使用的是 php8.1+yii2 框架,看起来应该是有内存泄漏存在,想请教一下这种怎么排查?
    brader
        1
    brader  
       Jan 18, 2024
    一个月才膨胀到 1G 内存,可以不用理。看下开启一下多少个请求就重启的配置应该就行了
    996635
        2
    996635  
       Jan 18, 2024
    FPM 直接设置 max_requests 低一些, 会自动销毁并新建。
    phpfpm
        3
    phpfpm  
       Jan 18, 2024
    你们一个月不上线?
    ZeekChatCom
        4
    ZeekChatCom  
       Jan 18, 2024
    @phpfpm 上线也不一定要重启啊
    well775397252
        5
    well775397252  
    OP
       Jan 18, 2024
    @996635 感觉没解决根本问题,想排查一下原因
    well775397252
        6
    well775397252  
    OP
       Jan 18, 2024
    @brader 每个 worker 大到 200m ,按道理几十 M 才正常吧
    ben1024
        7
    ben1024  
       Jan 18, 2024
    . 排查:
    如果知道是哪个业务线, 就用 Xdebug 逐步看执行内存情况, 主要在于静态或内存变量相互依赖
    如果不知道用 Tideways 试试
    . 直接点 max_requests 设置小一些, 精神压力小很多
    markgor
        8
    markgor  
       Jan 18, 2024
    如果没使用到 fastcgi_finish_request 理论上不会有代码级别的内存泄漏问题。
    至于 php-fpm ,我记得申请后的内存就算使用完,也不会放出给系统,避免下次使用重新申请,
    另外还有第三方扩展等的原因
    brader
        9
    brader  
       Jan 18, 2024
    @well775397252 这个不一定,看业务的,二三十 M 比较常见,几百 M 可能是有些接口有大数组,或者像 excel 导入导出之类的业务
    ucando
        10
    ucando  
       Jan 18, 2024
    其实我更想知道要怎么操作才会内存泄漏?
    well775397252
        11
    well775397252  
    OP
       Jan 18, 2024
    @ucando
    @phpfpm 对啊,几个月才更新一次
    well775397252
        12
    well775397252  
    OP
       Jan 18, 2024
    @ben1024 哎,都试试吧,先压测一下瞧瞧
    QlanQ
        13
    QlanQ  
       Jan 18, 2024
    不认为你这存在内存泄露,如果是有问题,1 个月才到 1G ?流量多一点,分分钟都能爆了吧
    zCikyx7PGx5mhXbp
        14
    zCikyx7PGx5mhXbp  
       Jan 18, 2024
    xhprof 分析看看
    woshicixide
        15
    woshicixide  
       Jan 18, 2024
    你这问题有点问的有点不清不楚,这 1 个多 G 是单个 worker 还是全部加起来,另外 fpm 大概率不会有这种问题,可以看看你装的扩展有没有可能
    encro
        16
    encro  
       Jan 18, 2024
    yii2 的 10 年老用户了。。。

    修改 fpm 配置,跑完 1000 个请求就销毁,永远不会有问题的。。。

    你首先得找到是那个进程的问题。内存持续增加,那么是命令行程序?
    encro
        17
    encro  
       Jan 18, 2024
    @well775397252
    每个 work200m ,可能是因为你 php 装了一些没用的扩展。开启了没必要的缓存。
    encro
        18
    encro  
       Jan 18, 2024
    很可能是你开启了 xdebug
    well775397252
        19
    well775397252  
    OP
       Jan 18, 2024
    @encro #16 php-fpm,现在没开启自动重启进程那个配置
    well775397252
        20
    well775397252  
    OP
       Jan 18, 2024
    @woshicixide 全部加起来,平均每个进程 200 多 M
    encro
        21
    encro  
       Jan 18, 2024
    php 开启了 xdebug ,结巴词库,ip 地址库之类,为了提高性能,有些程序会将字典之类的加载的内存,很正常。
    zhangqilin
        22
    zhangqilin  
       Jan 18, 2024   1
    内存满了不一定不会回收,你放到一台内存小点的机器上或者 pod 上,
    比如 1 个月 1g ,你放到 500m 的上,然后压测看会不会 OOM
    说不定内存占用过多了就会回收了
    coderzhangsan
        23
    coderzhangsan  
       Jan 18, 2024
    @well775397252 #20 平均每个进程 200 多 M ,fpm 配置里 pm.max_requests 设置的多少,如果设置的比较大,那有可能会增长到这个两级,把这个值适当降低就可以了;正常来讲 fpm 进程很难会内存溢出,除非一些占用内存的比较大的场景才会,例如大数据的导入和导出,又或者开启了 debug 等扩展,静态内存占用较大。
    hahamy
        24
    hahamy  
       Jan 19, 2024
    每个 fpm 进程 200 多兆,200 多兆看的是哪个值? top 命令的内存有几个指标
    Rorysky
        25
    Rorysky  
       Jan 19, 2024
    不是什么关键业务就定时重启,有时间关注现实生活
    NjcyNzMzNDQ3
        26
    NjcyNzMzNDQ3  
       Jan 19, 2024
    xhprof +1 , 这个工具用堆栈排查每个方法占用内存大小、耗时、cpu 用量,我之前有 curl_util 忘记 close 就用的他
    yc8332
        27
    yc8332  
       Jan 19, 2024
    要看你怎么重启 fpm 的,一直开着的话,如果你的请求中有需要大内存的,很正常。
    lairdnote
        28
    lairdnote  
       Jan 19, 2024
    xhprof. 或者跟踪进程 xstrace
    xaxb
        29
    xaxb  
       Jan 19, 2024 via iPhone
    Php 被发明时就有内存泄漏,7 以后已经好很多了。需要 max request 参数定期杀进程,不然多大的内存都能慢慢吃完
    About     Help     Advertise     Blog     API     FAQ     Solana     5154 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 83ms UTC 08:44 PVG 16:44 LAX 01:44 JFK 04:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86