我有一个 Ubuntu 12.04 服务器,它有时会完全死机 - 没有 SSH,没有 ping,在物理重新启动之前什么都没有。
重新启动后,我在 syslog 中看到 oom-killer 杀死了几乎所有东西。
其中有很多详细的内存使用信息。如何阅读这些日志以查看导致 OOM 问题的原因?服务器的内存远远超过它需要的内存,所以它不应该耗尽内存。
Oct 25 07:28:04 nldedip4k031 kernel: [87946.529511] oom_kill_process: 9 callbacks suppressed
Oct 25 07:28:04 nldedip4k031 kernel: [87946.529514] irqbalance invoked oom-killer: gfp_mask=0x80d0, order=0, oom_adj=0, oom_score_adj=0
Oct 25 07:28:04 nldedip4k031 kernel: [87946.529516] irqbalance cpuset=/ mems_allowed=0
Oct 25 07:28:04 nldedip4k031 kernel: [87946.529518] Pid: 948, comm: irqbalance Not tainted 3.2.0-55-generic-pae #85-Ubuntu
Oct 25 07:28:04 nldedip4k031 kernel: [87946.529519] Call Trace:
Oct 25 07:28:04 nldedip4k031 kernel: [87946.529525] [] dump_header.isra.6+0x85/0xc0
Oct 25 …Run Code Online (Sandbox Code Playgroud) 我的团队在尝试进行由 OutOfMemoryErrors 触发的良好堆转储时遇到了困难。出于特定原因,我们目前正在使用从 bash 脚本调用的 jmap 进行转储,而不是使用 HeapDumpOnOutOfMemoryError 标志。我们使用的是 64 位 1.6 JVM,堆大小约为 3 GB。我们的堆转储失败 90% 的时间(猜测)。
有什么我们可以做的事情来提高我们获得干净的堆转储的几率,我们可以用它来解决内存问题吗?我已经读到 jmap 在 Java 1.4 中存在重大问题,但现在应该主要解决这些问题。
JBoss 中 PermGen OutOfMemoryError 的根本原因是什么?
我在我的开发环境中运行 JBoss AS 4.2.2,这是在多次重新部署我的 Web 应用程序后发生的。
Christian Vest Hansen 的博客给出的 JVM 选项很有帮助,但并没有完全解决问题:
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:MaxPermSize=128m
Run Code Online (Sandbox Code Playgroud) Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1540673 bytes) in /home/appdev/glicious/Nutrition.php on line 41
如果您没有注意到,134217728 比 1540673 大两个数量级。
错误地,我在我的 ubuntu 服务器上执行了一些使用所有内存(我认为是交换)的应用程序,现在它崩溃了,SSH 不起作用并冻结。除了以下解决方案,您还知道其他选择吗:
当 ssh 不起作用时,有什么方法可以远程重新启动服务器?我仍然可以 ping 服务器,所以想知道是否有任何保留内存用于杀死不友好的进程或基本命令,例如重新启动操作系统。
*使用“nohup”执行的命令,因此它们不会以关闭 ssh 会话而结束。
我刚刚将我所有的网站都移到了具有 4GB RAM 的新服务器上。几乎立即,mysql 开始崩溃,并且有一次没有重新启动,这导致了一次重大中断(因为我没有注意到,直到有人向我指出)。
这是删除 CRON 作业的日志:http : //pastebin.com/9SAUBcFp(apache2 调用了 oom-killer、内存不足错误等)
在没有df -h超过4%的使用率。
这是 free -m 的输出
total used free shared buffers cached
Mem: 4002 2090 1911 0 168 1015
-/+ buffers/cache: 906 3095
Swap: 255 8 247
Run Code Online (Sandbox Code Playgroud)
这是 mysqlreport 的输出
__ Key _________________________________________________________________
Buffer used 849.00k of 16.00M %Used: 5.18
Current 2.99M %Usage: 18.71
Write hit 44.87%
Read hit 98.84%
__ Questions ___________________________________________________________
Total 198.55k 33.8/s
QC Hits 147.94k 25.1/s %Total: 74.51
DMS 31.35k …Run Code Online (Sandbox Code Playgroud) 我们有一个 postgres 9.0 实例,它运行在一台非常强大的机器上(96G RAM/24 个内核)。最近几周,我们经历了由于 OOM 杀手因内存不足而杀死 postgres 子进程而导致的崩溃。似乎由于使用连接池,这些子进程寿命很长(这是有道理的,因为打开和关闭连接需要时间),问题是它们的内存消耗逐渐增长,甚至达到 9Gigs/进程。正如您可能想象的那样,拥有 10 个这样的内存就可以填满可用的内存,并且 oom-killer 就会启动。
问题是:
作为参考,可能影响内存的设置:
max_connections = 950
shared_buffers = 32MB
Run Code Online (Sandbox Code Playgroud)
所有其他设置都不会被覆盖,这意味着我们使用默认值。
在尝试将一个相当大的文件夹 (450G) 备份到该服务器中的 2TB 驱动器时,该驱动器仅作为备份目标rdiff-backup(版本 1.2.8 - 最后标记为stable)导致内核崩溃。
系统:
Linux giorgio 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
磁盘:软件镜像RAID模式下2块1TB磁盘,1块2TB磁盘专用于备份。
我有一个怀疑:服务器上的内存是2G RAM + 2G swap = 4G。文件大小最大为 16G。是否有可能rdiff-backup在某个时候将整个文件加载到内存中?
在任何情况下,都不应该发生内核恐慌(因为 rdiff 进程被杀死了?所以内存应该再次可用?),所以我想我的问题有两部分,一:关于我的怀疑,二:关于内核恐慌。
顺便说一下,恐慌是最近开始的,相当多的备份已经成功——完整的和增量的——并且那些大 GB 文件已经存在。所以我猜这是新的 Debian 内核的错而不是 rdiff-backup 的错?
发生恐慌时的日志文件部分http://pastebin.com/e9a5fQdh
屏幕上的最后一件事:

编辑/更新:我刚刚尝试创建一个 20GB 的交换文件(使用来自 /dev/zero 的 dd)并且服务器再次关闭,对ping.
从查看日志来看:似乎内核已经杀死了一些进程 - 包括我怀疑导致这一切的那个进程(rdiff-backup) -但说“耗尽了可杀死的进程”。似乎杀死进程并没有释放内存?
我有一个 Rocks 集群系统,带有 NAS,在 RAID 10 配置中使用 btrfs 文件系统。最近,我们一直面临“设备上没有剩余空间”错误,我最终发现元数据几乎完全用完。所以我希望执行平衡操作来解决这个问题。
我不清楚的是,在进行平衡操作时,我们的用户是否可以继续工作并访问他们在 nas 上的目录?平衡手册指出:
“文件系统的磁盘状态始终保持一致,因此意外中断(例如系统崩溃、重新启动)不会损坏文件系统。平衡操作的进度会暂时存储,并将在挂载时恢复,除非挂载选项指定了skip_balance。”
这让我认为数据块只有在该块的平衡完成后才会被重新分配,但我在任何地方都没有找到我的问题的明确答案:用户继续工作、在 nas 上读取/写入数据是否安全在平衡操作期间,或者是否有必要在此过程中使系统离线,这对于我们的 TB 数据可能需要数小时或数天的时间?
network-attached-storage outofmemoryerror memory-usage btrfs
我正在运行具有 512MB 内存的 Ubuntu VPS。它只是开发服务器,因此实际上没有流量。尽管如此,我还是时不时地收到 Memory Exhaustion 消息,我的整个内存都被耗尽了。我试图在 SF 浏览各种类似的问题,但无法真正解决没有流量的服务器消耗内存的情况。下面是顶部的输出:
ps aux 的输出为:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 23572 1684 ? Ss Apr11 0:03 init
root 1177 0.0 0.1 18888 1028 ? Ss Apr11 0:01 cron
mysql 1189 0.0 5.6 258344 29680 ? Ssl Apr11 1:04 /usr/sbin/mysqld
syslog 1202 0.0 0.1 12536 788 ? Ss Apr11 0:01 /sbin/syslogd -u syslog
root 1268 0.0 0.5 49424 2684 ? Ss Apr11 0:00 …Run Code Online (Sandbox Code Playgroud) outofmemoryerror ×10
linux ×3
memory-usage ×3
apache-2.2 ×2
memory ×2
ubuntu ×2
btrfs ×1
debian ×1
dump ×1
java ×1
jboss ×1
kernel-panic ×1
mysql ×1
oom ×1
oom-killer ×1
performance ×1
permgen ×1
php5 ×1
postgresql ×1
rdiff-backup ×1
ssh ×1