我的托管服务器上有一个 vb 3.8.4 论坛和一个 drupal pressflow 6.22 网站
当我将 Drupal 网站添加到服务器时,我发现服务器中存在很多性能问题
有时还会导致服务器瘫痪
以下是主机服务器规格:
- 操作系统 CentOS Linux 5.5
- Webmin 版本 1.560
- 内核和 CPU Linux 2.6.18-194.26.1.el5 on x86_64 处理器信息 Intel(R) Pentium(R) Dual CPU E2160 @ 1.80GHz, 2 核
- 实际内存总计 3.74 GB,已使用 2.35 GB 虚拟内存总计 4 GB,已使用 124 kB
- 本地磁盘空间总计 1.76 TB,已使用 147.63 GB
以下是基本的 Apache 设置:
- Apache MPM 预分叉
- HostnameLookups 关闭
- AllowOverride 无
- 最大客户数 100
- 每个子线程数 25
- 启动服务器 8
- 每个子项的最大请求数 4000
- mod_deflate 已启用
- mod_expires 已启用
以下是基本的 php.ini 设置:
- 安全模式 = 开启
- 最大执行时间 = 1200
- 最大输入时间 = 1200
- 内存限制 = 1500M
这是 mysql 设置:
- 最大允许数据包数=3G
- 最大连接数=200
- 等待超时=30
- 线程缓存=50
- 连接超时=30
- 查询缓存限制=1M
- 交互超时=30
以下是top
cpu 命令结果:
以下是free -m
和iostat
命令的结果:
命令结果如下mysqladmin -u root -p ext -ri 30 | grep tmp_disk_tables
:
- | 创建临时磁盘表 | 1771 |
- | 已创建的临时磁盘表 | 2 |
- | 已创建的临时磁盘表 | 5 |
- | 已创建的临时磁盘表 | 3 |
- | 已创建的临时磁盘表 | 7 |
- | 已创建的临时磁盘表 | 0 |
我们安装了:ffmpeg、gd 库和 zend 优化器
CPU 平均负载始终高于 3
那么有人可以帮助我吗?
如果您需要任何其他必要的信息,请在评论中询问?
答案1
您的内存限制为 3.5 GB(memory_limit = 3500M
),并且可能要启动 256 台服务器(MaxClients 256
)。这使您的总潜在内存消耗接近 900 GB。除非您有那么多内存,否则您很有可能在进行交换,而这正是导致性能下降的原因。
您需要大幅减少这两个数字。在支持 Drupal 的五年里,我从未见过 3.5 GB 的内存限制。如果您偶尔有需要如此高限制的任务,则应该在命令行上运行,drush
而不是通过 Apache。
的输出是什么?如果没有的话(free -m
会怎么样?)iostat
yum install sysstat
答案2
某些进程正在占用您的 CPU。要找出原因,请执行以下操作:
Type on the terminal:
top
Press Shift+P to order the list by CPU usage.
检查哪个进程正在消耗你的 CPU 或者检查如何处理它,或者将其发布在评论中。
答案3
Drupal 是高度关系型的。它的一个常见功能是在磁盘上创建临时表。如果可以,您可以通过优化查询或将 MySQL tmpdir 放在 RAM 磁盘上来尽量减少这种情况。
运行这个:
mysqladmin -u root -p ext -ri 30 | grep tmp_disk_tables
第一个条目将告诉您自上次重启以来在磁盘上创建了多少个临时表;之后,直到您按 Ctrl-C 退出之前的 30 秒窗口内创建了多少个临时表。
就 MySQL 配置建议而言,您也没有说明您的 Drupal 表是 InnoDB 还是 MyISAM。在 Drupal 6 中,它默认为 MyISAM。