2

错误
我有一个带有大量照片上传器 (Plupload) 的 Web 应用程序,当我上传二十张照片时,大约六张(大约 30%)将因内部服务器错误而失败。我已经检查了该域的 Apache error.log,它没有任何新内容(我知道我正在查看正确的 error.log,因为这里确实显示了旧的错误)。

这只发生在我的 Dreamhost(我的托管服务提供商)服务器上的 VPS 上,而在我的开发服务器上,它运行如丝般顺滑。

哦,一个月前一切很好,然后就开始失败了。那时我使用的是 Uploadify,因为它使用了 Flash,所以我无法调试上传失败的位置。

文件和脚本
上传的文件是照片,大约 100 kB 大,尽管我已经成功上传(并且仍然可以)3 MB 的照片。我的 .htaccess 在上传过程中自然不会改变。服务器端是一个 PHP 脚本,它使用 GD2 库来移动和调整照片大小。

服务器状态
我最近将我的 VPS 从 300 MB 的 RAM 升级到了 400 MB。这东西以前可以工作,我升级它只是为了排除内存的原因。我对 PHP 的内存限制也是 200 MB,所以这应该足够了。

我对Dreamhost 不想提供帮助感到非常沮丧,并表示“我们不能对您的代码导致的错误负责”和“不幸的是,我们仍然无法帮助您调试问题。”
当我的应用程序无法运行并且我的客户感到沮丧时,已经有一周的“支持”稀少了。

问题

  1. 这种“你靠自己”是否支持整个行业的标准,即您的主机会以不同的方式处理这个问题吗?
  2. 该如何调试呢?
4

4 回答 4

3

我将假设您有一个标准的 Apache + PHP 设置。一种可能的配置是预分叉设置;在这种情况下,Apache 将通过派生更多的子节点来适应系统负载。

只有 400 MB 的 RAM,你会非常紧张,所以如果你正在运行 20 个进程,每个进程占用 200MB(假设每个进程都使用 GD 处理相当大的文件),你就会陷入内存管理器的一些困境。

我会先将实例总数减少到 2 个,看看情况如何;还可以通过运行来关注内存使用情况top

无论如何,运行一个单独的任务管理器(例如 Gearman)来执行调整大小任务可能对您有利,这样上传只需要专注于移动上传的文件并运行调整大小任务;这样,您可以大大减少运行 PHP 实例所需的内存。

于 2012-06-15T11:28:04.883 回答
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()可能会失败,它会返回一个状态码来告诉应用程序什么时候有,但如果应用程序没有测试这个状态并采取相应的行动那么它最终可能会默默地沿着奇怪的执行路径走下去,并且在用户(或开发人员)看来只是“它刚刚停止工作”。

我的最后一条评论是,您真的应该考虑在您的开发环境中设置一个私有 VPS,以反映您的 Dreamhost 生产配置,并将其用于集成、验收测试和支持。这很容易做到,你可以搞砸它并添加调试/假设选项,然后回滚而不会污染你的生产环境。VMare Appliances 和 VirtualBox 等工具让这一切变得简单。有关我如何为托管服务执行此操作的说明,请参阅此博客文章。

于 2012-06-15T10:41:33.570 回答
0

尝试回答问题 2:如果您检查了所有代码并且没有发现任何错误,我认为您能做的最好的事情就是检查服务器上运行的所有程序的版本(apache、php、 ...),例如,我记得我在 apache 和 php 上运行的 web 服务有问题,php 版本是 5.2.8,经过大量调查,我发现该版本解析有问题xml 数据。

于 2012-06-15T02:52:23.347 回答
0

关于问题的第一部分:Dreamhost 确实提供带有“回电”的付费支持服务。我们曾经使用它来降低某些东西。他们在一般支持方面非常出色(比许多主机 IMO 更好),但您不能指望专门的服务,他们必须处理很多琐碎的问题。但是支付回电费,在电话上大约 2 分钟后,您就可以得到您想要的答案,而且他们还可以获得 10 美元(经常性)的时间。你们俩都赢了。请记住取消经常性费用。

关于问题的第二部分,我们与他们有同样的问题。他们的回应(正如 Linus 在评论中所建议的那样)是他们记录了您的“用户”使用的所有进程的 CPU 使用情况。如果该总数超过阈值,他们将简单地终止进程以降低周期。没有错误消息,没有警告,没有任何东西。进程可以包括 MySQL、CGI (perl) 或 PHP。没有办法监控或预测,我们也无法围绕它进行编程。解决方案......不幸的是,不是 DreamHost。(webhostingtalk.com 将为您提供大量的主机创意)。所以我们用于某些站点,但不用于其他站点。

于 2012-06-16T11:50:49.827 回答