尽量不要用PHP函数readfile输出文件的原因

C 2018-4-27 7550

最近发现网站负载有点高,主要出在图片服务器那边。之前一直用readfile()验证和加载图片,猜测是它所致。

网上说readfile()如果把输出缓存清空的话不走内存,于是我拿自己电脑进行了一个测试。

我在本地放了一个1G左右的大文件,首先用浏览器直接下载。

注意看电脑里的磁盘这项,Firefox占用很高是因为它在预读,这个因为是客户端可以无视。

重点看服务端,nginx是在向外输出文件,所以磁盘也在走,CPU和内存都比较正常。

接着我用PHP输出同一文件,这次的测试结果,除了Nginx的占用外,还多出了PHP-CGI和System两项读数,磁盘和CPU占用整整是之前的三倍!

这是什么情况呢?咨询几位大神后得知,之前用Nginx直接读取文件,流程是:

文件->Nginx->输出

而用PHP请求文件时,流程是:

文件->CGI(System)->PHP->Nginx->输出

虽然我清空了输出缓存,但读取流程依然要经过各环节的磁盘传递,而这些流程无疑增加了磁盘使用。

更可怕的是,对接环节还产生了额外的校验等环节,大幅增加了CPU的使用。

因此,若不是有特别需要,尽量不要使用PHP进行文件读取。

最新回复 (1)
  • 幻焕 2018-4-27
    2
    这个屌丝有点大佬……
    • 屌丝论坛
      3