此文主要解决部分基于NPHP的站点在做大之后,因cleanup相关清理程序超时无法正常运行,导致出现用户等级、做种魔力无法正常更新等情况。主要可能的报错和原因为:
- 站点使用Cloudflare作为CDN,因为清理程序运行超过100s,被强制522超时停止运行。
- 站点Nginx设置后端超时时间过短,导致502报错。
以下讲解和代码patch均基于本人fork的官方源码 Rhilip/NexusPHP(v1.5.beta5.20120707),不提供除本文外的任何形式的说明以及免费讲解。如果你非NPHP架构或者你站点规模还达不到出现cleanup超时,请勿了解!!
cleanup长耗时任务分析
通过对原有include/cleanup.php中的printProgress方法进行修改,我们可以发现以下任务均为长耗时任务
- calculate seeding bonus (做种魔力值计算)
- update count of seeders, leechers, comments for torrents (种子做种以及评论情况更新)
具体耗时视站内做种人数以及种子相关表大小而定,一般来说如果NPHP宿主机性能较差,在peers表突破1w行之后,做种魔力清算就会突破60s限制(Nginx默认超时时间)。而种子表突破5k行之后,种子情况更新也会突破相关限制。(以上行数均为本人瞎写瞎编)
此外,这两个长耗时任务均处在清理程序首部,容易因为超时自动退出,而且NPHP默认是通过register_shutdown_function("autoclean")的形式进行执行,导致后续清理程序无法正常运行。
考虑通过以下方式进行优化:
- 去除Nginx服务超时限制,本地使用crontab定时wget请求cron.php页面。具体方法可见NPHP中
include/config.php说明。 - 使用PHP_CLI运行
cron.php文件,绕过Web服务器的相关超时设置。这也是本文的相关说明要点。









