2

我最近在两台服务器之间迁移(最新的规格较低),即使服务器上没有负载,它也会一直冻结,以下是我的规格:

HP DL120G5 / Intel 四核 Xeon X3210 / 8GB RAM

免费 -m 输出:

             total       used       free     shared    buffers     cached
Mem:          7863       7603        260          0        176       5736
-/+ buffers/cache:       1690       6173
Swap:         4094        412       3681

如您所见,交换中有 412 mb ysed,而几乎 80% 的物理 RAM 可用

我不知道这是否会造成任何麻烦,但在我的旧服务器中几乎没有使用交换,所以我认为这似乎不对。

我有 cPanel 许可证,所以我联系了他们的支持,他们注意到我的 iowait 很高,是的,当我运行 sar 时,我注意到它有时超过 60%,通常是 20%,但有时会达到 60% 甚至 70%

我真的不知道如何诊断,我怀疑我的驱动器很慢,这可能会导致延迟,所以我使用 dd 进行了测试,速度为 250 mb/s,所以我认为传输速度还可以加上硬件应该是全新的。

当我使用 gzip 或 tar 提取文件(备份或恢复 cpanel 帐户)时,通常会发生高负载。

需要提到的一件重要的事情是,top 报告说 mysql 正在使用 100% 到 125% 的 CPU,有时它会达到更多,如果我跟踪 mysql 进程,我会不断收到此错误:

setsockopt(376, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP(不支持操作)

我不知道这意味着什么,我也没有通过谷歌搜索得到有用的信息。

我忘了提到它是一个物有所值的网络托管服务器,因此它具有网络托管的标准设置(apache、php、mysql .. 等)

那么我如何正确诊断此问题并找到解决方案,或者可能的原因是什么?

4

1 回答 1

1

您现在可能已经意识到,free -m输出显示 7603MiB (~7.6GiB) USED,而不是免费的。

您的内存不足,它已经开始交换,这将大大减慢速度。由于大多数应用程序不知道虚拟内存现在来自速度慢得多的磁盘,因此系统很可能看起来“挂起”而没有描述问题的反馈。

根据您的描述,我要kill重新获得控制权的第一个过程是 Mysql。如果你有从另一台机器到这个盒子的 ssh/rsh/telnet 连接,你可能必须从那里登录才能得到一个可用的命令行kill

对于正在发生的事情,我的第一个想法(假设?)是......

  • MySQL 正在尝试做一些不支持的事情,因为当前配置了这台机器。它可能缺少库或未设置环境变量或任何数量的东西。

  • 该操作分配了一些内存,但失败并且在执行时没有清理分配。如果这是一个 shell 脚本,可以通过trap在开头放置一个事件命令来修复它,该命令运行一个释放内存并清理的函数。

  • 编写代码是为了不断重试失败,因此它会迅速耗尽您的所有内存。回到 shell 脚本说明,该trap函数可能还会提示您是否真的要继续重试。

不是一个完整的答案,但希望会有所帮助。

于 2012-12-23T15:13:15.387 回答