apache - 如何确定是什么导致 Drupal 6 占用所有内存并崩溃?

标签 apache drupal-6 crash memory-management cpu-usage

我们有一个运行 Drupal 6 的站点和一组非常标准的模块,例如 Views、CCK 等。生产站点运行良好,但在我创建生产服务器的 SQL 转储并将数据导入本地沙箱后,它停止工作。

更准确地说,在向沙盒的 Drupal 实例发出单个请求(例如加载首页)后,10-20 个 httpd 进程突然开始占用机器上的所有 CPU 和内存。几秒钟后,所有 mysql 句柄都已用完,站点离线。这些进程将继续做他们正在做的任何事情,直到我关闭整个 Apache httpd。

由于我无法从服务器获得任何输出,因此我想不出调试的方法。数据库中是否有一些垃圾会导致无限循环或类似的东西?

这是 top 的输出片段.这些都是单页加载的结果。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 7690 apache    16   0  337m  52m  13m S 27.4  1.4   0:04.42 httpd
 7715 apache    15   0  337m  52m  13m S 24.1  1.5   0:08.69 httpd
 7777 apache    15   0  337m  52m  13m R 20.8  1.4   0:09.94 httpd
 7883 apache    16   0  337m  52m  13m S 19.5  1.5   0:12.39 httpd
 7574 apache    16   0  337m  52m  13m R 17.2  1.4   0:06.30 httpd
 7678 apache    15   0  337m  52m  13m S 16.2  1.4   0:02.26 httpd
 7695 apache    15   0  337m  52m  13m S 15.5  1.4   0:10.29 httpd
 7774 apache    15   0  337m  52m  13m S 15.5  1.4   0:04.62 httpd
  748 mysql     15   0  364m  67m 5408 S 15.2  1.9  15:37.77 mysqld
 7847 apache    15   0  337m  52m  13m S 14.9  1.4   0:07.10 httpd
 7839 apache    16   0  337m  52m  13m S 14.2  1.4   0:02.85 httpd
 7879 apache    15   0  337m  52m  13m S 13.9  1.5   0:12.65 httpd
 7851 apache    16   0  337m  52m  13m R 12.5  1.4   0:06.77 httpd
 7724 apache    16   0  337m  52m  13m S 12.2  1.4   0:06.62 httpd
 7882 apache    16   0  337m  52m  13m S 11.6  1.5   0:09.04 httpd
 8273 apache    16   0  337m  52m  13m S  9.2  1.4   0:07.30 httpd
 7712 apache    15   0  337m  52m  13m R  8.9  1.4   0:08.13 httpd
 7742 apache    16   0  337m  52m  13m S  8.9  1.4   0:06.74 httpd
 7754 apache    15   0  337m  52m  13m S  8.6  1.4   0:04.16 httpd
 7739 apache    16   0  337m  52m  13m S  8.3  1.4   0:04.51 httpd
 7787 apache    15   0  337m  52m  13m S  8.3  1.4   0:07.44 httpd
 7819 apache    16   0  337m  52m  13m S  7.6  1.4   0:02.03 httpd
 7755 apache    16   0  337m  52m  13m S  7.3  1.4   0:05.89 httpd
 7766 apache    16   0  337m  52m  13m R  7.3  1.4   0:01.12 httpd
 7894 apache    16   0  337m  52m  13m S  7.3  1.4   0:09.49 httpd
 7814 apache    15   0  337m  52m  13m S  5.9  1.4   0:03.88 httpd
 7576 apache    15   0  337m  52m  13m S  5.6  1.4   0:03.63 httpd
 7829 apache    15   0  337m  52m  13m S  5.3  1.4   0:04.17 httpd
 7579 apache    15   0  337m  52m  13m S  5.0  1.4   0:04.43 httpd
 7817 apache    15   0  337m  52m  13m S  4.0  1.4   0:04.60 httpd
 7789 apache    15   0  337m  52m  13m S  2.0  1.4   0:04.41 httpd
 7820 apache    15   0  337m  52m  13m S  1.0  1.4   0:01.57 httpd

最佳答案

首先,如果尚未完成,您应该清空所有缓存表。
然后尝试在没有启用 javascript 的情况下访问网站(这可能会阻止 ajax 调用)。
也许您甚至可以尝试使用 lynx(浏览器)进行访问。
如果 apache 进程的创建不是来自 javascript 而是来自内部……那么这意味着一个 PHP scipt 正在生成 apache 进程,这对于 PHP 脚本来说是一种非常糟糕的行为,所以我希望不是这样。
你可以试试 Drupal 上的分析模块,比如 this one .崩溃后,您至少可以查询报告页面,所有分析数据都保存在数据库中,并且可以报告您感兴趣的数据(请参见屏幕截图),如果您可以尝试检查包含分析数据的 MySQL 表无法访问模块页面。
否则,您可以尝试 XDebug 并在查询中导出 kcachegrind 文件,但这对于 Drupal 请求可能很难阅读。
编辑
还可以尝试使用 firebug 检查您是否没有从请求的页面发出所有请求(可能是因为空图像 src,例如如果它不是 javascript)。并检查 apache 日志和 Mysql 日志——您可以在其中激活请求日志记录。

关于apache - 如何确定是什么导致 Drupal 6 占用所有内存并崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5868560/

相关文章:

apache - HTTP ://localhost/phppgadmin/-> 403 Forbidden

php - 如何从 MySQL 表中提取多个 HTML 标签

c++ - 找出调用 __fastfail 的原因

c# - 发布 .NET 程序崩溃

Apache 使用所有 16 GB 内存,如何限制其进程和内存使用量?

php - Apache (PHP) 和 Mysql - 理想的 2 服务器设置

html - 我的@font-face 怎么了?

drupal - drupal如何将节点标题转换为url

Drupal:我在哪里可以获得主题中的 $content 数组?

iphone - Flurry API 崩溃 iPhone 模拟器