PHP的程序并发稍微高一点就慢的不行,sys 消耗出奇的高,除了太慢被切换,平时 strace 总能发现php进程疯狂的stat文件,之前查的不是性能问题,就没有深究。

如果正在使用 open_basedir ,那么好消息,一次性能提升的机会来了;最近考虑升级到7.4,性能可能会好点,结果在更新配置文件的时候突然发现 open_basedir 有一行提示:Note: disables the realpath cache, 天!难怪stat这么多,搜索一通,找到 Bug #52312 ,没想到的是,这个禁用从5.2时代就开始了,但是这个禁用的提示到7.2才写出来,坑人! 禁用的原因是安全问题 CVE-2006-5178 ,open_basedir 绕过漏洞。

明白原因后,有两种处理方法:第一种,就是不用 open_basedir 了,虽然官方说这个是解决多租户隔离问题的,实际上在别的场景还是有积极意义的,直接关闭确实不太让人好接受;那么第二种办法的话,就是修改源码,注释掉这段逻辑(patch),同时保证禁用危险函数

disable_functions = symlink,link

随便测试了几个页面,差不多能获得 20% - 100% 不等的性能提升,大概和包含的文件数量有关系,同时 sys 几乎降到之前的一半了,可以!