错误
我有一个带有大量上传器(Plupload)的网络应用程序用于照片,当我上传说有20张照片时,大约有6张(大约30%)会因内部服务器错误而失败。我已经检查了这个域的Apache error.log,它没有什么新东西(我知道我正在查看正确的error.log,因为旧的错误确实显示在这里)。
这只发生在Dreamhost(我的托管服务提供商)服务器上的VPS上,而在我的开发服务器上,它运行顺畅。
哦,用的东西一个月前工作得很好,然后开始失败。当时我使用的是Uploadify,因为使用了Flash,所以我无法调试上传失败的位置。
文件和脚本
上传的文件是照片,大约100 kB大,即使我已经成功上传(并且仍然可以)3 MB照片。我的.htaccess在上传过程中自然不会改变。在服务器端是一个PHP脚本,它使用GD2库来移动和调整照片大小。
服务器状态
我最近将我的VPS从300升级到400 MB的RAM。这个东西以前工作,我升级它只是为了排除内存的原因。另外我对PHP的内存限制是200 MB,所以这应该是足够的。
我非常沮丧 Dreamhost不想帮助,声称“我们不能对您的代码导致的错误负责”和“我们仍然无法帮助您不幸地调试了这个问题。“ 这是一周的稀疏“支持”,而我的应用程序不起作用,我的客户感到沮丧。
问题
答案 0 :(得分:3)
我将假设你有一个标准的Apache + PHP设置。一种可能的配置是预分叉设置;在这种情况下,Apache将通过分配更多自己的孩子来适应系统负载。
只有400 MB的RAM你很紧张,所以如果你运行20个进程,每个进程需要200MB(假设每个进程使用GD处理相当大的文件)你会进入内存管理器的热水
我会先将实例总数减少到2,看看会怎么样;还要通过运行top
来关注内存使用情况。
无论如何,运行一个单独的任务管理器(如Gearman)来执行调整大小任务可能是有益的,这样上传只需要专注于移动上传的文件并运行调整大小任务;这样,您可以大大减少运行PHP实例所需的内存。
答案 1 :(得分:1)
关于你的Q1:简单的答案就是你得到了你付出的代价。 300Mb RAM Dreamhost VPS的成本约为每年360美元 。为此,您将获得VPS服务以及与提供虚拟环境相关的服务故障响应。操作系统,软件堆栈和应用程序不在此服务范围内。为什么?这种自定义知识库支持每小时可能需要50-300美元 。如果您希望Dreamhost能够提供无偿服务,那么您就是无理和欺骗自己。这就是像这样的网站。
所以我的建议是,你会感受到愤怒和沮丧,并找出如何帮助自己。
关于你的Q2。 (i)您需要了解Apache错误的位置; (ii)如果您使用的是D / B,则同样存在任何SQL错误。 (iii)您需要确保启用PHP错误日志记录并验证PHP日志的去向。 (iv)您需要检查这些日志,并使用生成运行时错误的小脚本来验证日志记录是否正常工作。
您还应该考虑使用增强的工具(如php_xdebug)来增强日志记录级别并引入应用程序日志记录。
根据我的经验,系统和功能很少会无声无息。但是,应用程序程序员经常忽略返回状态等。例如,在GD库中, imagecopyresized()可能会失败并返回状态代码以告知应用程序何时具有,但是如果应用程序没有t测试这个状态并采取相应的行动然后它可能会以静默的方式结束奇怪的执行路径,并且只对用户(或开发人员)显示为“它刚刚停止工作”。
我的最后一点评论是,您应该考虑在开发环境中设置一个私有VPS,它反映您的Dreamhost生产配置,并将其用于集成,验收测试和支持。这很容易做到,你可以搞乱这个并添加调试/如果选项然后回滚而不污染您的生产环境。像VMare Appliances和VirtualBox这样的工具使这很容易。有关我如何为托管服务执行此操作的说明,请参阅this blog post。
答案 2 :(得分:0)
尝试回答问题2:如果你检查了所有代码并且没有看到任何错误,我认为你能做的最好的事情就是检查服务器上运行的所有程序的版本(apache) ,php,...),例如,我记得我在apache和php上运行的Web服务有问题,php版本是5.2.8,经过大量调查我发现那个版本有解析xml数据时出现问题。
答案 3 :(得分:0)
关于问题的第一部分:Dreamhost确实通过“回拨”提供付费支持服务。我们曾经用过这一次来降低一些东西。他们非常善于提供一般支持(比许多主机IMO更好),但是你不能期望专注的服务,他们必须处理很多琐碎的问题。但支付回电话费,在电话约2分钟内,您可以得到您想要的答案,而且他们可以获得10美元(经常性)。你们都赢了。请记住取消经常性费用。
关于问题的第二部分,我们遇到了同样的问题。他们的回答(正如Linus在评论中所建议的那样)是他们记录了“用户”使用的所有进程的CPU使用情况。如果该总数超过阈值,他们将简单地终止进程以使循环停止。没有错误消息,没有警告,没有任何问题。进程可以包括MySQL,CGI(perl)或PHP。无法监控或预测,我们无法对其进行编程。解决方案......不幸的是,不是DreamHost。 (webhostingtalk.com将为您提供大量的主机创意)。所以我们用于某些网站,但不能用于其他网站。