Ubuntu Linux,顶层命令结果的解释

我是一个Linux操作系统的新手,我在我的基于drupal的网站上遇到了麻烦,事实certificate这是非常慢的。 我使用2个独立的服务器托pipe和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%。 这是否意味着我的处理器正在最大化。 可以做些什么来解决这个问题? 我需要添加更多的核心吗? 然而,相反,负荷平均值较低。

我是一个绝对的新手,并拿起书上的大多数术语。 如果有人能帮助,请谅解。

你应该检查为什么 MySQL如此加载,如果你已经有2或4核心,这可能不是你的问题。 一个好的,巧妙优化的数据库系统将能够使CPU时间最大化之前使用更多的RAM。 在考虑硬件升级之前,需要考虑的一些事情是:

  • 表索引
  • 慢查询
  • tmp表格设置
  • (编辑) OPTIMIZE TABLE
  • (编辑)数据库碎片(见marcoc的答案)
  • 系统上有足够的I / O容量

我只是猜测,但似乎你的系统花费了太多的时间在数据库本身(没有太多的I / O,并没有在所有的交换或类似的),所以你可能应该检查出你的索引…也许数据库只是忙于扫描表,因为它没有适当的索引用于你运行的查询(如果是这样的话,添加硬件不会帮助)

在那之后,如果你还需要更多的function,我会给系统添加更多内存,也许每个内核最多4GiB(如果你运行4个内核,那么就是16GiB),但是这取决于你的数据集大小和访问模式阅读,主要是写等等)

试试这个超级方便的stream程图来识别你的问题(尽pipe我猜你是CPU绑定的): 替代文字

来自海登less校的博客 。

如果这台服务器的MySQL,谁使用所有的内存?MySQL使用181 Mb的内存。 这是非常小的。

  1. 查看:SHOW FULL PROCESSLIST \ G;
  2. 看日志文件(mysql和你的networking服务器)
  3. 使用mysqltuner.pl( http://mysqltuner.pl/mysqltuner.pl )来调整my.cnf。
  4. 在硬件级别优化(添加内存和CPU)

一个处理器的mysql进程的CPU使用率为99.7%。 如果你有多个处理器(如“这是否意味着我的处理器正在最大化”),那么一定还有其他一些与CPU相关的东西?

这个线程很好地解释了这个问题: 混淆了cpu-values-in-unix-top-command

你写的那个网站

结果真的很慢

从何时起? 它是否逐渐发生?

如果网站逐渐变慢,那么也可能是数据库碎片问题。 在这种情况下,或者如果你不能创build索引,考虑一个相当简单的转储/恢复。

我觉得奇怪的MySQL只使用一个小的RAM 4.6%,几乎整个系统RAM没有运行,因为TOP说1进程运行,但这不是你的CPU超载的原因。

如果问题是最近的,旧的,我会检查CPU是否没有过热,并减缓由BIOS。 我有类似的问题,机器非常慢,一旦CPU由于温度变慢,几乎100%的CPU使用两个核心。 如果您重新启动机器并检查BIOS设置中的CPU温度,可以使用tail -f /var/log/syslog查看过热情况,并可能在BIOS设置中查看过热情况。 在我的情况下,BIOS报告CPU温度高于75oC(在同时运行2个虚拟机的一些testing后达到95oC)。 在不关机的情况下进行一个简单的testing就是打开机箱,在机器上直接使用风扇(普通的风扇,而不是CPU),温度快速下降,CPU超载将停止(机器加速)。

我刚刚卸下并清理CPU散热器(几乎完全堵塞),它解决了BIOS报告CPU温度低于55°C,快速机器和没有过载的CPU的问题。