相关疑难解决方法(0)

为什么 Linux 奇怪地报告“空闲”内存?

这是一个关于 Unix 操作系统如何报告内存使用情况的规范问题
类似问题:

我有运行Debian 6.0.6 Squeeze 的生产服务器

#uname -a

Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

每天cron以 root 身份执行备份脚本:

#crontab -e

0 5 * * * /root/sites_backup.sh > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

#nano /root/sites_backup.sh

Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

一切正常,但我注意到 Munin 的内存图显示备份后缓存缓冲区的增加。

然后我只是下载备份文件并删除它们。删除后 Munin 的内存图缓存缓冲区返回到备份前的状态。

这是穆宁图: …

linux unix memory-usage

45
推荐指数
2
解决办法
8245
查看次数

配置 vm.overcommit_memory 的效果

由于 oom-killer 启动,我的 VPS Web 服务器在 CentOS 5.4(Linux 内核 2.6.16.33-xenU)上不规则地运行(例如每月一次或需要几周)变得无响应。服务器的监控表明它没有通常用完内存,只是每隔一段时间。

我已经阅读了一些指向此页面的博客,其中讨论了使用以下 sysctl 设置来配置内核以更好地管理过度使用:

vm.overcommit_memory = 2
vm.overcommit_ratio = 80
Run Code Online (Sandbox Code Playgroud)

我对此的理解(这可能是错误的,但我找不到一个规范的定义来澄清)是,这可以防止内核过度分配超出交换区 + 80% 物理内存的内存。

但是,我还阅读了一些其他来源,表明这些设置不是一个好主意 - 尽管这种方法的批评者似乎在说“不要做破坏您的系统的事情,而不是尝试这种混乱”的假设因果关系总是已知的。

所以我的问题是,在托管大约 10 个低流量站点的 Apache2 Web 服务器的上下文中,这种方法的优缺点什么?在我的特定情况下,Web 服务器有 512Mb RAM,1024Mb 交换空间。大多数情况下,这似乎已经足够了。

linux web-server memory-usage linux-kernel

41
推荐指数
2
解决办法
5万
查看次数

尽管有可用内存(缓存),但 OOM

尽管我们将近一半的内存用于 FS 缓存,但我们还是遇到了 OOM 杀手。我们每分钟记录一次内存统计信息(如 top 所报告的),但似乎有很多可用性。

...

Mem:  15339640k total, 15268304k used,    71336k free,     3152k buffers
Swap:        0k total,        0k used,        0k free,  6608384k cached

Mem:  15339640k total, 14855280k used,   484360k free,    13748k buffers
Swap:        0k total,        0k used,        0k free,  6481852k cached

[OOM killer: postgres killed]

Mem:  15339640k total,  8212200k used,  7127440k free,    32776k buffers
Swap:        0k total,        0k used,        0k free,  2394444k cached

...
Run Code Online (Sandbox Code Playgroud)

来自系统日志的 OOM 详细信息:

...
Jun 10 05:45:25 db kernel: [11209156.840462] wal-e invoked oom-killer: …
Run Code Online (Sandbox Code Playgroud)

postgresql oom

13
推荐指数
2
解决办法
1万
查看次数

获取/调试被 oom-killer 杀死的进程的核心转储

有没有办法获得核心转储或能够调试已被 oom-killer 杀死的进程?

或者甚至设置 oom-killer 来尝试使用 ABRT 来终止进程?

dump oom

10
推荐指数
2
解决办法
1万
查看次数

优化 VPS 服务器内存

我想做什么

服务器资源限制有时会很紧张;为了防止内存耗尽,我不得不限制服务器进程。我需要一点专家的帮助来知道我是否在正确的轨道上,并且可能会发现任何明显的设置更改,以帮助系统以更高的稳定性运行更多。

历史

最近我的公司从共享主机升级到了 VPS。基本上我们已经超出了我们的共享主机,并且由于周末 CPU 使用率过高,主机暂停了我们的网站,因此开始出现问题。我们的网站用户倾向于每周在周五和周六增加一倍或三倍,这在我们的案例中并不意外。(一周内每天约 5000 次访问 [~2500 名访客],周末约 9500 次访问 [~4500 名访客]。)

现在我们在 VPS 上,我们没有 CPU 问题。(事实上​​,CentOS WHM 控制面板说我们处于“.000201% CPU 负载”。)但是,我们遇到了内存不足问题,导致崩溃。

问题概要

我们的网站是基于 WordPress 的。然而,除了评论,几乎没有“写”活动;大多数用户只是看到我们创建的相当静态的页面。

几个月前,也就是 2012 年 10 月,当我们第一次升级到 VPS 时,该网站在一周内运行良好,但每个周末都被内存阻塞。通常它会反复崩溃(24 小时内有 5-20 次,偶尔发生),通常从周五晚上开始,一直持续到周六下午。

在一周内,服务器始终以 65-90% 的内存使用率运行,而在周末它会达到 100%,从而导致崩溃。

采取的纠正措施

由于我是 VPS 的新手,所以我从所有默认设置开始。后来我开始调整,遵循我在本网站和其他网站上阅读的有关解决内存问题的建议。

我对 MySQL、PHP 和 Apache 进行了调整,在“当前配置”中总结如下。我还重新编译了 Apache 和 PHP 以删除不需要的模块。我为 WordPress (W3T) 安装了一个更好的缓存插件,并添加了 APC 操作码缓存。我也开始使用 gz 压缩,并将大量静态文件移动到单独的子域。

我编写了一个漂亮的小脚本来按计划检查服务器状态,并根据需要重新启动它,它还向我发送了服务器错误日志的副本,以帮助进行故障排除。(我知道,如果那样的话,这只是创可贴。但保持网站在线很重要,因为没有人愿意在周末坐下来监视它。)

就在最近,大约一周前(2013 年 1 月),我将服务器 RAM 从 1 GB(2 GB 突发)升级到 2 GB(3 GB 突发)。这似乎解决了大部分问题,但我仍然偶尔会收到服务器挂起的通知(大约一周一次),以及“无法应用进程槽”PHP 错误。

当前配置

它是一个 …

mysql php optimization memory apache-2.2

5
推荐指数
1
解决办法
2993
查看次数

如何让 OOM Killer 更加被动

我能够使用旧的 2.6.x 内核在 VPS 上编译具有 1 GiB RAM 的程序。但是当我尝试在具有 1.1 GiB RAM 和 3.9.x 内核的 VPS 上编译它时,编译器总是被 OOM Killer 杀死。

如何让 OOM 更被动?

kernel oom

1
推荐指数
1
解决办法
411
查看次数