mysql - 物理内存空闲时使用的交换空间

标签 mysql linux io swap

我最近在 2 个服务器之间迁移(最新的具有较低的规范),即使服务器上没有负载,它也会一直卡住,以下是我的规范:

HP DL120G5/英特尔四核至强 X3210/8GB 内存

free -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% 的物理内存可用

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

我有 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 .. 等)

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

最佳答案

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

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

根据您的描述,我要杀死 以重新获得控制权的第一个进程是 Mysql。如果您从另一台机器通过 ssh/rsh/telnet 连接到此机器,您可能必须从那台机器登录才能获得可用的命令行以从中kill

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

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

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

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

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

关于mysql - 物理内存空闲时使用的交换空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14011855/

相关文章:

php突然抛出错误 "The mysqli extension is missing. Please check your PHP configuration. See our documentation for more information."

linux - shell脚本变量传递给awk并需要保留双引号

mysql - 从其他脚本调用时,Linux 脚本和 MySql 操作不起作用

java - bufferedReader.readline 返回 null

java - 通过File IO操作读取一个字节

php - 从日期之间的表中检查类型 MySQL,php

C# Mysql cultureinfo.invariantculture

mysql - 在 MySQL 中创建一个索引是另一个索引的子集

sql - 我正在用 Linux 构建我的第一个 SQL 服务器。哪个是这台机器的最佳发行版?

input - 打印后用户输入