系统管理员 101:如何找出服务器崩溃的原因并监控性能?

系统管理员 101:如何找出服务器崩溃的原因并监控性能?

我有一个使用 Drupal 的网站,似乎存在无休止的性能问题。大约 5 个月前,它的速度非常慢。我请了一些人员为匿名访问者安装了 nginx,将一些查询进行了 ajax 化,这样它们就不会在页面加载期间触发,并帮助我找到了代码中的一些瓶颈。

大约一个月后,网站速度明显加快,但从字面上看,还称不上“快”。与此同时,我现在每月要花 400 美元给 Slicehost 托管一个每天访问量不到 5,000 个独立用户的网站。是的,你没看错。去 Drupal 吧。

最近,网站又开始崩溃,速度又变慢了。我负担不起雇人来彻底研究我的代码,然后做出可能有用也可能没用的更改。我也没钱投入更多硬件来解决这个问题。

所以我需要自己弄清楚问题出在哪里。问题:

  • 当 Apache 崩溃时,是否有可能找出导致其崩溃的原因?一定有办法,对吧?如果可以,我该怎么做?是否有软件可以告诉我哪个进程导致我的服务器死机?(例如“Apache 崩溃是因为有人访问了页面 X。”或“Apache 崩溃是因为您从源 X 导入了太多 RSS 项目。”)一定有办法了解这一点,对吧?

  • 有什么好的、新手友好的方法来监控我当前的 Apache 性能?我的开发人员朋友告诉我“就用 Top 吧,老兄”,但 Top 向我显示了一堆没有任何上下文的数字。我不知道 Top 中的坏数字和好数字是什么,也不知道哪些进程相关,哪些不相关。有没有新手友好的服务器监控工具?理想情况下,我可以有一个页面,它能给我一个颜色编码的指示器,指示 Apache 的性能如何,然后向我显示当前性能不佳的进程或页面列表。这样,我就可以知道什么时候性能不好,然后是什么原因导致性能如此糟糕。

  • 为什么 PHP 内存很重要?我的 PHP 占用了 30MB 的内存。如果我降低这个数字,PHP 的运行速度会更快吗?

感谢您的任何建议。我花了一年左右的时间试图提高我的广告收入,以便我可以聘请承包商来解决我的性能问题。我不想学习所有这些系统管理员巫术。我现在已经接受了可能别无选择的事实。

答案1

Drupal 的扩展性非常好;与他们社区中的一些网站管理员交谈,你会发现有人经常超过这个数字,所以我不能说这是 Drupal 固有的问题。不过我想到了一些问题:你启用了缓存吗?你确定这不是你的数据库(MySQL/Postgres 等)的问题吗?你的网站运行在什么样的硬件上?上面还有其他网站吗?请提供更多详细信息;目前有太多未知变量。

答案2

您实际上并没有提供太多技术信息,但 Drupal(和其他大型 PHP 应用程序)最简单、最有效的优化之一是使用 APC、memcache 或类似程序。

仅 APC 就很容易设置,而且非常有效。以下是我的设置,似乎与 Drupal 配合得很好(在 php.ini 文件中):

extension=apc.so
apc.apc.stat = 0
apc.include_once_override = 1
apc.shm_size = 90

realpath_cache_size = 256K
realpath_cache_ttl = 180

apc.shm_size 的大小最为重要(用于 .php 文件缓存的服务器内存的最大 MB 数)。通常较小的大小就足够了,但如果此缓存太小,缓存几乎无用。对于大多数 Drupal 安装,“50”就足够了。但是,如果您在同一台服务器上有多个非多站点的活跃 Drupal 安装,则需要将其设置得更高。

如果您使用 APC,则需要确保 Zend Optimizer 已关闭,它们不能很好地协同工作。单独使用 APC 可以将页面加载速度提高 30-40%。如果 shm 设置得太低,页面加载速度就不会提高。

另外,我想知道进行初始优化的人是否真的了解 Drupal 并进行过 Drupal 优化或只是进行过一般的服务器优化。您可能已经设置了这些,但要确保您已正确设置admin/settings/performance。即:

Caching mode: normal
Page compression: enabled
Optimize CSS files: enabled
Optimize JavaScript files: enabled

这些都非常有效。

您可能还会使用视图,视图可以通过多种方式进行优化,但每个视图也可以拥有其内部缓存和缓存生命周期。如果您无论如何都会缓存页面,并且用户大多是匿名的,那么它不会产生太大的影响。

还有许多其他优化方法(您可能仍需要学习管理方面的内容)。如果 Drupal 日志admin/reports/dblog未显示您要查找的错误,例如大多数致命错误和“白屏错误”都无法解决。

  • Apache 崩溃信息您应该尝试查找 apache 和/或 php 日志以获取有关崩溃原因的更多信息。例如:

locate error.log或者locate php.log使用该位置查看最后的日志消息: sudo tail -n 100 /var/log/apache2/error.log<--来自我的服务器的示例路径当您发现错误时,请用谷歌搜索。

  • 监控 apache“top” 不太方便用户使用,但速度很快,而且适用于几乎所有 UNIX 机器。我通常用它来查看 apache2 或 mysql 是否阻塞。

  • 内存使用情况 如果“devel”模块告诉您页面加载需要大约 30M,那么对于包含大量模块的 Drupal 模块来说,这很正常。我安装的一些模块占用更多内存(例如 40M),但许多模块占用的内存也更少。我当前的项目每正常页面浏览量占用大约 20M。停用不必要的模块(或切换到更有效的模块)是减少内存使用量的一种方法。

在 php.ini 中,还要确保“memory_limit”不要太低。Drupal 确实使用大量内存,例如,所有图像缩放操作都非常占用内存。默认值非常低。理论上,您安装的内存可能在 35M 下就可以工作,但我会将其设置为至少两倍,以确保所有操作都能正常工作。有些人可能不同意,但我通常将其设置为超过 100M。

如果您想进行真正的硬核 Drupal 优化,有很多指南,但这个网站可能是最全面的: http://2bits.com/articles/drupal-performance-tuning-and-optimization-for-large-web-sites.html

是的,如果您每月支付那么多托管费用,您应该可以雇用一位专家工作一小时左右:)。

相关内容