我是 Linux 操作系统的新手,我在使用基于 drupal 的网站时遇到了问题,速度非常慢。我使用 2 个独立的服务器进行托管和 MYSQL。在执行顶部命令,我得到了以下结果
top - 06:34:26 up 17:54, 1 user, load average: 4.54, 4.98, 5.36
Tasks: 79 total, 1 running, 78 sleeping, 0 stopped, 0 zombie
Cpu(s): 74.8%us, 23.6%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 1.7%si, 0.0%st
Mem: 4044336k total, 3963584k used, 80752k free, 21760k buffers
Swap: 1477940k total, 0k used, 1477940k free, 3530868k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1077 mysql 20 0 502m 181m 4124 S 98.8 4.6 549:02.28 mysqld
mysql 进程的 CPU 使用率为 99.7%。这是否意味着我的处理器已达到极限。如何解决此问题?我需要添加更多核心吗?然而,相反,平均负载很低。
我绝对是新手,大部分术语都是从书本上学到的。如果有人能帮忙,我将不胜感激。
答案1
你应该看看为什么MySQL 负载如此之大,如果您已经有 2 个或 4 个核心,那么这可能不是您的问题。一个好的、巧妙优化的数据库系统将能够在 CPU 时间达到最大值之前使用更多的内存。在考虑硬件升级之前,需要考虑以下几点:
- 表索引
- 慢查询
- tmp 表设置
- (已编辑) 优化表
- (已编辑)数据库碎片(参见 marcoc 的答案)
- 系统有足够的 I/O 容量
我只是猜测,但似乎你的系统在数据库本身上花费了太多时间(在 I/O 上没有太多,也没有交换或类似的东西),所以你可能应该检查你的索引...也许数据库只是忙于扫描表,因为它没有适合你运行的查询的索引(如果是这种情况,添加硬件也无济于事)
之后,如果您仍然需要更多马力,我会为系统添加更多内存,可能每个核心最多 4GiB(即,如果您运行 4 个核心,则为 16GiB),但这实际上取决于您的数据集大小和访问模式(主要是读取、主要是写入等...)
答案2
尝试使用这个超级方便的流程图来识别您的问题(虽然我猜您是受到 CPU 限制):
从海登少校的博客。
答案3
如果该服务器是 MySQL,谁会使用所有内存?... MySQL 使用 181 Mb 内存。它非常小。
- 查看:SHOW FULL PROCESSLIST\G;
- 查看日志文件(mysql 和你的网络服务器)
- 使用 mysqltuner.pl(http://mysqltuner.pl/mysqltuner.pl)来调整my.cnf。
- 硬件层面的优化(增加内存和 CPU)
答案4
你写道该网站
结果真的很慢
从什么时候开始的?是逐渐发生的吗?
如果网站逐渐变慢,那么也可能是数据库碎片问题。在这种情况下,或者如果您无法创建索引,也可以考虑进行非常简单的转储/恢复。