什么时候脚本被视为性能损失?
我正在编写一个抓取网页的网页抓取工具,解析DOM并存储特定的值。然而,这显然需要很长时间,因为这个过程几乎永远不会结束。所以我被迫将脚本的超时设置得相当高。但现在我担心这个脚本会影响在同一台服务器上运行的其他域。
长时间执行的脚本会自动成为服务器的威胁吗?或者是关于保持内存使用率和CPU使用率低的全部内容?如果脚本等待其他服务器在50%的时间内响应怎么办?它似乎不会使用任何CPU。 sleep()在这方面发挥了作用吗?
答案 0 :(得分:1)
这取决于服务器的硬件,但作为一般经验法则,只要您采取预防措施,我认为您不会遇到问题。
例如,如果您的脚本运行无限循环(while (true) {}
),则在每次迭代后调用sleep()
以确保它不会尽可能快地敲击CPU。但是,您可能会发现这是一个非问题,因为您的抓取工具会等待下载网页,与sleep()
的效果完全相同。
就内存而言,只需确保自己进行垃圾回收。例如,如果您有一个数组来保存您的爬虫访问过的每个网页的记录,它将快速建立,直到它占用可以分配给PHP脚本的所有内存(在php.ini
中定义) 。当它无法分配更多内存时,您的脚本将失败。而是将这些请求记录到数据库或文件中,并定期清除阵列以释放内存。请记住,磁盘空间比内存便宜很多。
显然,如果没有看到您的抓取脚本,很难给出详细的答案,但这些通常都是很好的选择。我们的一个脚本在无限循环中运行,检查收件箱中的电子邮件,并且已运行数周而没有问题。