如何解决PHP+FPM导致内存耗光的问题
2012-03-26 12:07
302 查看
nginxphp-fpm配置过程中最大问题是内泄漏出问题:服务器的负载不大,但是内存占用迅速增加,很快吃掉内存接着开始吃交换分区,系统很快挂掉!
google了一天,终于发现些有用的东西,其实根据官方的介绍,php-cgi不存在内存泄漏,每个请求完成后php-cgi会回收内存,但是不会释放给操作系统,这样就会导致大量内存被php-cgi占用。
官 方的解决办法是降低PHP_FCGI_MAX_REQUESTS的值,我用的是php-fpm,对应的php-fpm.conf中的就是 max_requests,该值的意思是发送多少个请求后会重启该线程,我们需要适当降低这个值,用以让php-fpm自动的释放内存,不是大部分网上说 的51200等等,实际上还有另一个跟它有关联的值max_children,这个是每次php-fpm会建立多少个进程,这样实际上的内存消耗是 max_children*max_requests*每个请求使用内存,根据这个我们可以预估一下内存的使用情况,就不用再写脚本去kill了。
下面其实是重启脚本的过程,并不是什么很严重的事情,但是我们要小心,不是说一直重启就是好的,因为重启会导致cpu的使用率飙升,系统负载巨大,所以还是平衡上面的数据比较重要。
google了一天,终于发现些有用的东西,其实根据官方的介绍,php-cgi不存在内存泄漏,每个请求完成后php-cgi会回收内存,但是不会释放给操作系统,这样就会导致大量内存被php-cgi占用。
官 方的解决办法是降低PHP_FCGI_MAX_REQUESTS的值,我用的是php-fpm,对应的php-fpm.conf中的就是 max_requests,该值的意思是发送多少个请求后会重启该线程,我们需要适当降低这个值,用以让php-fpm自动的释放内存,不是大部分网上说 的51200等等,实际上还有另一个跟它有关联的值max_children,这个是每次php-fpm会建立多少个进程,这样实际上的内存消耗是 max_children*max_requests*每个请求使用内存,根据这个我们可以预估一下内存的使用情况,就不用再写脚本去kill了。
下面其实是重启脚本的过程,并不是什么很严重的事情,但是我们要小心,不是说一直重启就是好的,因为重启会导致cpu的使用率飙升,系统负载巨大,所以还是平衡上面的数据比较重要。
相关文章推荐
- 解决Linux下php-fpm进程过多导致内存耗尽问题
- 导致内存溢出的原因有哪些?内存溢出问题又如何解决
- Android开发中如何解决加载大图片时内存溢出的问题
- 解决进程间共享内存,由于某个进程异常退出导致死锁问题
- Android开发中如何解决加载大图片时内存溢出的问题
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件
- 如何解决XML文件中特殊字符“& <”导致解析错误的问题
- iOS指南系列:如何解决奔溃问题-关于内存访问
- 如何解决PHP里大量数据循环时内存耗尽的问题
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- Android 如何解决默认壁纸更改为ImageWallpaper之外的壁纸,在特定的操作下,导致死机的问题。
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- Android 如何解决TG导致的黑屏问题
- 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题
- 如何解决加载大图片时内存溢出的问题
- PHP+FPM导致内存耗光的问题
- 如何解决BitBlt打印BMP,数据量太大导致速度效率慢的问题
- 如何解决SQLServer占内存过多的问题
- 【转载】SQL Server占用内存过大导致服务器死机问题的解决
- 如何解决SQL Server占用内存的问题