AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 812629
Accepted
Jovan Perovic
Jovan Perovic
Asked: 2016-11-02 16:25:31 +0800 CST2016-11-02 16:25:31 +0800 CST 2016-11-02 16:25:31 +0800 CST

清除 OOM 和连续的 mysqld 崩溃

  • 772

我正在尝试消除似乎正在影响mysqld服务的内存不足问题。该服务完全随机终止 - 有时每周一次,有时每两天一次。

我的 VPS 有 6GB 的 RAM 并且没有交换文件(我的提供商不允许/支持交换)。我的应用程序是PHP基于 - 的(Symfony框架)并在Apache 2.2.

今天晚上,我观察到 RAM 使用量激增。遗憾的是,我无法捕获 的准确输出free -m,但我记得-/+ buffers/cachefor columnfree大约为 1G。RAM 使用量从 4.8G 上升到 5.2G。

在维护窗口期间,我关闭了httpd和mysqld,mongod之后我得到了以下free -m输出:

[root@XXXYYYZZZ ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          6144       4916       1227          0          0       1207
-/+ buffers/cache:       3709       2434
Swap:            0          0          0

3709M我的问题是那些用过的内存是怎么回事?该top命令没有透露太多:

top - 19:54:58 up 3 days,  6:35,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  21 total,   1 running,  20 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   6291456k total,  5034692k used,  1256764k free,        0k buffers
Swap:        0k total,        0k used,        0k free,  1236060k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 19236 1180  932 S  0.0  0.0   0:00.02 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd/23992
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper/23992
  140 root      16  -4 10644  520  248 S  0.0  0.0   0:00.00 udevd
  482 root      20   0  179m 1252  828 S  0.0  0.0   0:00.04 rsyslogd
  493 dbus      20   0 21408  616  376 S  0.0  0.0   0:00.00 dbus-daemon
  510 root      20   0 66632 1232  520 S  0.0  0.0   0:00.00 sshd
  517 root      20   0 22184  904  668 S  0.0  0.0   0:00.00 xinetd
  870 root      20   0 66828  924  276 S  0.0  0.0   0:00.00 saslauthd
  871 root      20   0 66828  680   32 S  0.0  0.0   0:00.00 saslauthd
  886 root      20   0 83080 2664  840 S  0.0  0.0   0:04.99 sendmail
  894 smmsp     20   0 78668 2108  648 S  0.0  0.0   0:00.03 sendmail
  944 root      20   0  114m 1232  628 S  0.0  0.0   0:00.81 crond
  955 root      20   0 88304  21m 1784 S  0.0  0.3   0:05.25 miniserv.pl
22840 root      20   0 96276 4448 3460 S  0.0  0.1   0:00.09 sshd
22842 root      20   0  105m 1988 1524 S  0.0  0.0   0:00.03 bash
22985 root      20   0 96300 4168 3164 S  0.0  0.1   0:00.03 sshd
22987 root      20   0 57848 2340 1624 S  0.0  0.0   0:00.04 sftp-server
23313 root      20   0 96276 4472 3460 S  0.0  0.1   0:00.68 sshd
23315 root      19  -1  105m 2024 1544 S  0.0  0.0   0:00.16 bash
25080 root      19  -1 14900 1220  992 R  0.0  0.0   0:00.00 top

我知道 Linux 在 RAM 中进行缓存,但我会说这是非常不规则的。我可能错了,事实上,我希望我错了。

在仔细阅读了drop_cache我可以执行的调用之后,好吧,删除缓存,我决定尝试使用它,只是为了得到这个:

[root@XXXYYYZZZ ~]# sync; echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied

因此,我无法删除缓存,无法创建交换文件,并且由于 RAM 消耗而飞得离太阳非常近(并且由于mysqld崩溃而受到了一些烧伤)。

有谁知道如何更好地调查这个?

如果我要推翻我最近非常恼火的 VPS 提供商,我需要确凿的证据证明我没有误解性能数据,或者更糟糕的是,合法进程实际上正在消耗那么多 RAM。

非常感谢!

更新

我跑了virt-what,得到了openvz

更新 2:消息中的 OOM 条目:

/var/log/messages-20161009:Oct  2 16:43:43 XXXYYYZZZ kernel: [56050139.271683] Out of memory in UB 23992: OOM killed process 22029 (mysqld) score 0 vm:5044284kB, rss:656944kB, swap:8280kB
/var/log/messages-20161009:Oct  2 16:43:55 XXXYYYZZZ kernel: [56050150.552528] Out of memory in UB 23992: OOM killed process 30486 (mysqld) score 0 vm:310088kB, rss:214456kB, swap:0kB
/var/log/messages-20161009:Oct  5 12:56:17 XXXYYYZZZ kernel: [56295842.893210] Out of memory in UB 23992: OOM killed process 13284 (mysqld) score 0 vm:5066092kB, rss:694760kB, swap:40kB
/var/log/messages-20161023:Oct 22 17:54:09 XXXYYYZZZ kernel: [1219419.032263] Out of memory in UB 23992: OOM killed process 789 (mysqld) score 0 vm:5057832kB, rss:698980kB, swap:0kB
/var/log/messages-20161023:Oct 22 17:54:20 XXXYYYZZZ kernel: [1219428.340161] Out of memory in UB 23992: OOM killed process 21700 (mysqld) score 0 vm:310088kB, rss:271892kB, swap:0kB
/var/log/messages-20161030:Oct 29 12:14:47 XXXYYYZZZ kernel: [1804212.497098] Out of memory in UB 23992: OOM killed process 25691 (mysqld) score 0 vm:5057548kB, rss:690164kB, swap:0kB
/var/log/messages-20161030:Oct 29 12:15:06 XXXYYYZZZ kernel: [1804222.381820] Out of memory in UB 23992: OOM killed process 23659 (mysqld) score 0 vm:310088kB, rss:248376kB, swap:0kB
mysql outofmemoryerror
  • 2 2 个回答
  • 208 Views

2 个回答

  • Voted
  1. Best Answer
    user9517
    2016-11-03T02:22:54+08:002016-11-03T02:22:54+08:00

    首先,除非您正在做一些测试,否则您永远不需要删除缓存。Linux 内核使用“空闲”内存进行缓存。如果某些东西请求内存并且它在其他地方不可用,则将从缓存内存中满足该请求。

    要开始解决您的问题,您应该查看您的日志。它们应该包含来自 OOM 系统的信息,说明它为什么来玩以及它做了什么。

    正如其他人所建议的那样,您似乎正在使用容器 VPS(openvz 等)。如果是这种情况,他们可能唯一真正的解决方案是迁移到使用不同虚拟化技术(例如 KVM 等)的不同 VPS。

    • 2
  2. Dmitry Zayats
    2016-11-02T23:06:35+08:002016-11-02T23:06:35+08:00

    你得到的错误

    [root@XXXYYYZZZ ~]# sync; echo 3 > /proc/sys/vm/drop_caches
    -bash: /proc/sys/vm/drop_caches: Permission denied
    

    是否启用了 noclobber 的结果(man bash 并搜索 >| )。像这样试试

    sync; echo 3 >| /proc/sys/vm/drop_caches
    

    顺便说一句-您可以尝试从这里开始

    sync; echo 2 >| /proc/sys/vm/drop_caches
    

    您还可以查看slabtop 命令的输出,以了解您的内存在吃什么。并不是说它会有多大帮助,但你至少会知道它是否来自一些平板缓存。
    同时安装 sysstat 包并启用 1 分钟分辨率的 sar,这样您就可以历史分析您的系统性能,而不是实时在线监控。

    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve