Php 繁重的处理导致站点不可用

Php 繁重的处理导致站点不可用,php,mysql,apache,cron,Php,Mysql,Apache,Cron,每个月我们必须生成并发送10000张PDF账单。这是由cron作业完成的。大约需要2.5个小时才能完成,但问题是在这段时间内,网站关闭了。有没有办法运行cron作业,并且仍然能够保持站点正常运行?我们没有资源在专用服务器上执行此操作 我们有一个16核的专用php服务器,一个专用mysql服务器。我们正在调用一个从PHP中编写的C++程序,制作每个PDF并将它作为电子邮件发送到PHP。 我尝试在几代人之间添加睡眠,但这似乎没有帮助 cron过程如何?您是否喜欢立即开始,在接下来的2.5小时内连续生

每个月我们必须生成并发送10000张PDF账单。这是由cron作业完成的。大约需要2.5个小时才能完成,但问题是在这段时间内,网站关闭了。有没有办法运行cron作业,并且仍然能够保持站点正常运行?我们没有资源在专用服务器上执行此操作

我们有一个16核的专用php服务器,一个专用mysql服务器。我们正在调用一个从PHP中编写的C++程序,制作每个PDF并将它作为电子邮件发送到PHP。 我尝试在几代人之间添加
睡眠
,但这似乎没有帮助


cron过程如何?您是否喜欢立即开始,在接下来的2.5小时内连续生成并发送10000


否,cron设置为在2.5小时后停止。我们将在第二天晚上重新运行它,直到它全部发出。大多数情况下它是不需要的

您应该首先确定流程的瓶颈是什么(为什么网站关闭?):数据库、CPU还是网络

  • 如果是数据库,您应该创建一个视图来复制您的数据库,并在此数据库上运行pdf批创建。您还可以使用db上的索引来促进pdf的创建
  • 如果是CPU,您可以尝试将缓存系统添加到您的网站(文件缓存或使用memcach)
  • 如果是网络,您可以在unix系统上检查允许打开最大文件大小的ulimit

在两代之间使用
睡眠($delay)
,其中,$delay要经过实验。尝试从1开始,然后增加它。澄清(请最好编辑成您的问题):您在实际生成中使用了什么?生成一张账单需要多长时间?你是在共享网络主机上吗?我已经试过了,但是没有用。cron进程怎么样?你喜欢从现在开始,在接下来的2.5小时内连续生成并发送10000张账单吗?将cron作业拆分为更小的部分,这样我就不会在一个请求中发送10000张账单,但例如,每次1000次发送10张账单,当站点不可用时,实际的瓶颈是什么(可能是数据库),错误是什么(即,日志文件中的详细信息,请不要说“HTTP 500内部服务器错误”或类似内容)。您是否尝试过简单地使用nice设置较低的进程优先级?即,让cron作业等待资源而不是web(如果您基本上是在锤击数据库,则不会产生实际效果)。