php-fpm配置为 3倍 cpu core number就可以了
php-fpm稳定性比nginx稍差这是因为php-fpm内置了一个php解析器,php-fpm进程就和php程序捆绑了 , 如果php脚本写得不好,有死循环或者阻塞在某个远端资源上,会拖累加载它的php-fpm进程
而nginx和后端应用服务器之间通过网络连接 , 可以设置timeout,不容易堵死的
php-fpm的fastcgi是短连接我原以为是长连接的,看了代码才知道也是短连接,处理一个request就关闭掉
php-fpm接口采用fastcgi非常遗憾,php-fpm和fastcgi完全绑定了,无法独立使用。只能部署在支持http-fcgi协议转换程序背后(nginx) 。其实可以考虑在php-fpm代码包里面引入http协议支持,这样php-fpm可以独立运行,让nodejs无话可说
php-fpm等同于OpenRestyOpenResty是一个国人开发的nginx模块,就是在nginx引入lua解释器. 实际上,它和php-fpm的唯一差别就是一个采用php语法,一个用lua,所以OpenResty要作为nginx增强包使用还可以,要选择它作为一个主要编程工具 , 没有任何必要
从架构上来说 , php-fpm已经做到最好,超过大多数 python部署工具 , 我再也不黑它了
PHP命令执行PHP脚本,结束之前,内存会回收吗再详细说下问题:
unix下,用php命令来执行php脚本,在php结束之前,内存有没有机会被回收?新的GC算法有没有机会被调用?
出现这个问题,是因为线上有个 离线数据导入脚本,需要把几千万行数据筛选入库,发现,在执行过程中,到达一定程度 , 就会抛出 内存使用超过最大值 。
1Fatal error: Allowed memory size of 293601280 bytes exhausted
那第一想到的就是程序是不是有什么bug,造成内存超出 , 看了半天没有发现问题 , 于是,突然出现了这个疑问 。那要解决这个疑问 , 最好的办法就去翻源码吧 。
在之前我这么说:
都知道,PHP5.3有了新的垃圾回收机制:GC,它不是重点,不谈它的原理 。
经过翻阅PHP源码,发现,调用这个的时机是在 main/main.c ::php_request_shutdown这个函数中,
12/* 7. Shutdown scanner/executor/compiler and restore ini entries */zend_deactivate(TSRMLS_C);
php_request_shutdown,通过名字就能看出,它是在php请求结束的时候执行的 , 在这里会执行 gc_collect_cycles 来清理内存 。
其实这句话是没错,但它只针对于SAPI接口(之前我就错在这个地方 。),在用PHP命令执行php脚本的时候,是不会执行这个php_request_shutdown的 。
那回到最初的问题 , 过程中到底有没有执行GC呢?
为了更直观有效的知道答案,我选择了最BT,最暴力的方法 , 拦截gc_collect_cycles,输出error_log到文件,只要执行了,
那肯定会输出log来 。
重新编译PHP后 , 果不其然,符合官方的说法,只要buckets满超过默认值1000,就会启动GC来清理没用的内存,防止内存泄露 。
那问 “什么时间 触发的GC呢?”,答 “buckets超过1000的时候啊”,这不屁话嘛,要的是真真正正的执行流程 , so 。。不断的debug,
不断的grep,不断的step,不断的C+T,终于搞清楚了 。下面就来根据官方的说法详细谈谈 , PHP到底是怎么触发的 。
有一点要注意,PHP的命令入口 和 sapi接口的入口 是不同的 , 我就载在这个地方,以为都公用一个 。
测试代码以官方文档为例:
1234567891011121314?phpclass Foo{public $var = '3.1415962654';} for ( $i = 0; $i = 1000000; $i++ ){$a = new Foo;$a-self = $a;} echo memory_get_peak_usage(), "\n";?
这样的代码,在PHP5.3之前,肯定会造成大量的 内存泄露,不过,谁在开发时又能开发出这么变态的代码来?除非这个人很变态 。^.*
推荐阅读
- 怎么看抖音卖货直播间人数,怎么查抖音直播卖货数据
- erp系统如何完善操作,erp系统如何完善操作过程
- 网络打鱼游戏怎么举报,网络打鱼游戏合法么
- 直播运营团队业务,直播团队运营提成
- linux修改编码命令 linux修改显示编码
- 手机怎么下载u盘数据,手机怎么样下载u盘
- redis存储结构和使用情景,redis 存储结构
- linux清屏命令怎么用 linux清理屏幕快捷键
- 鄞州区电视怎么交费,鄞州数字电视营业厅