Questions tagged «out-of-memory»

1
OOM杀手如何决定首先杀死哪个进程?
该答案根据的值解释了内核在遇到OOM情况时采取的措施sysctl vm.overcommit_memory。 当overcommit_memory设置为0或1时,将overcommit被启用,并且允许程序分配比实际可用更多的内存。 现在,当我们在这种情况下用尽内存时会发生什么?OOM杀手如何决定首先杀死哪个进程?

2
使用/ var / log / messages调试内存不足
我的消息日志中将引发以下报告: kernel: Out of memory: Kill process 9163 (mysqld) score 511 or sacrifice child kernel: Killed process 9163, UID 27, (mysqld) total-vm:2457368kB, anon-rss:816780kB, file-rss:4kB 不管这个问题是针对还是无关紧要httpd,但我很好奇如何继续调试该问题。mysqldpostfix 我如何获得有关为什么PID 9163被杀死的更多信息,并且我不确定Linux是否将终止的PID的历史记录保存在某处。 如果您的消息日志文件中出现这种情况,您将如何逐步解决此问题? # free -m total used free shared buffers cached Mem: 1655 934 721 0 10 52 -/+ buffers/cache: 871 784 Swap: 109 …

4
在Linux Mint上调试“ Web内容”应用程序的CPU使用率高(接近总数)
我在家中的三台计算机上都安装了Linux Mint,并且每当打开Firefox时,它们几乎都变得非常慢。这是top的输出: 如您所见,“ Web Content”和Firefox共同消耗了我几乎所有的CPU,以及超过50%(4GB +)的系统内存。 我过去从未在Debian或Ubuntu中遇到过此问题,但到目前为止,在我安装Mint的每台计算机上都出现了此问题。这种极高的(几乎总计)CPU /内存使用率是恒定不变的,这使我的计算机无法使用。 有谁知道如何解决这个问题?如果没有修复程序,如何使该“ Web内容”应用程序完全停止运行?

2
OOM杀手无法正常工作,导致操作系统死机
多年来,我操作系统的OOM杀手er无法正常工作,并导致系统死机。 当内存使用率很高时,整个系统趋于“冻结”(实际上:变得非常缓慢)数小时甚至数天,而不是终止进程以释放内存。 我所记录的最长期限是辞职以进行重置之前的7天。 当即将达到OOM时,iowait很高(〜70%),然后变得不可测量。 工具:iotop已经表明,每个程序都从我的硬盘驱动器中以非常高的吞吐量(每数十MB /秒)读取数据。 这些程序正在读什么? -目录层次结构? -可执行代码本身? 我现在不完全是。 [编辑]在撰写此消息时(2017年),我使用的是最新的ArchLinux(4.9.27-1-lts),但几年前已经遇到了这个问题。 我在各种Linux发行版和不同的硬件配置中都遇到了相同的问题。 当前(2019年),我正在使用最新的Debian 9.6(4.9.0),我有16 GB的物理内存,安装了我的操作系统的SSD,没有任何交换分区。 由于我拥有的内存数量很大,因此我不想启用交换分区,因为这只会延迟问题的解决。 同样,使用SSD频繁交换可能会降低磁盘的使用寿命。 顺便说一句,无论是否有交换分区,我都已经尝试过,事实证明,这样做只会延迟问题的解决,而不能解决问题。 对我来说,问题是由于Linux从缓存中删除了必要的数据而导致的,这导致系统死机,因为它每次都必须从硬盘读取所有内容。 我什至不知道Linux是否不会删除正在运行的程序的可执行代码页,这将解释为什么通常不读取大量数据的程序在这种情况下会表现出这种方式。 我已经尝试了几种方法来解决此问题。 一种是设置/proc/sys/vm/min_free_kbytes为1000000(1 GB)。 因为这1 GB应该保持可用,所以我认为Linux将保留此内存以缓存重要数据。 但这没有用。 另外,我想补充一点,即使这可能听起来在理论上很不错,限制了虚拟内存到物理内存的大小尺寸是有用的,通过定义/proc/sys/vm/overcommit_memory到2不端正在我的处境技术上是可行的,因为那种应用由于某些原因,我使用的虚拟内存需要比有效使用的虚拟内存更多。 根据该文件/proc/meminfo,该Commited_AS值通常高于我的系统上物理内存的两倍(16 GB,Commited_AS通常大于32 GB)。 我在/proc/sys/vm/overcommit_memory默认值:上遇到了这个问题0,并且有一段时间我将其定义为:1,因为我更喜欢由OOM杀手杀死的程序,而不是行为不当,因为它们不检查mallocwhen的返回值。分配被拒绝。 当我在IRC上讨论此问题时,我遇到了其他Linux用户,他们也遇到了同样的问题,因此我想很多用户对此感到担忧。 对我来说,这是不可接受的,因为即使Windows可以更好地处理高内存使用情况。 如果您需要更多信息,请提出建议。 文档: https : //en.wikipedia.org/wiki/Thrashing_%28computer_science%29 https://en.wikipedia.org/wiki/Memory_overcommitment https://www.kernel.org/doc/Documentation/sysctl/vm。 txt https://www.kernel.org/doc/Documentation/vm/overcommit-accounting https://lwn.net/Articles/317814/ 他们谈论它: 为什么linux out-of-memory(OOM)杀手不自动运行,而是在sysrq-key上运行? 为什么OOM杀手有时无法杀死资源猪? 预加载OOM杀手 是否可以在强制交换时触发OOM杀手? 如何避免在OOM附近出现高延迟? …

3
什么是“内存不足”消息:牺牲孩子?
我的计算机最近用完了内存(使用大型GIS数据集时,编译软件会产生意料之外的结果)。在系统日志中,详细说明了如何处理OOM条件的以下行: Out of memory: Kill process 7429 (java) score 259 or sacrifice child 那or sacrifice child是什么意思 当然,这不是在考虑一些黑暗的仪式来使事情继续进行吗?

1
将“ memfd”视为“拥有文件的进程”是否错误?
https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/ 从理论上讲,您可以在memfd_create()不引入新系统调用的情况下实现[ ]行为,如下所示: int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU); (请注意,为了在此处更方便地保证tmpfs,我们可以使用“ /dev/shm”代替“ /tmp”)。 因此,最重要的问题是为什么我们到底需要第三种方式? [...] 后备内存用于拥有文件且不受安装配额限制的进程。 ^我认为这句话的第一部分不值得依靠吗? 所述memfd_create()的代码被作为“的字面实施链接的文件居住在[α] TMPFS必须是内核内部 ”。跟踪代码,我知道它与不实施LSM检查有所不同,正如博客文章继续说明的那样,它还创建了memfds以支持“密封”。但是,我非常怀疑memfds正在考虑不同的,以原则上TMPFILE。 具体来说,当OOM杀手敲门时,我认为它不会解决memfds持有的内存问题。这可能总计高达RAM的50%-tmpfs的size = option的值。内核不会为内部tmpfs设置其他值,因此它将使用默认大小50%。 因此,我认为我们通常可以期望拥有大memfd的进程,但是没有其他重要的内存分配不会被OOM杀死。那是对的吗?


2
httpd内存使用情况
httpd(Apache/2.2.29)的内存使用存在一些问题。 随着时间的流逝,httpd进程中的内存使用量会逐渐增加,直到最终达到100%。 我上次重新启动的时间httpd大约是24小时前。来自的输出free -m是: [ec2-user@www ~]$ free -m total used free shared buffers cached Mem: 1655 1415 239 0 202 424 -/+ buffers/cache: 788 866 Swap: 1023 4 1019 为了证明是肯定的httpd,我重新启动httpd并free -m再次运行: [ec2-user@www ~]$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] [ec2-user@www ~]$ free …

2
make -j(不带参数)是否危险?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 今天早些时候,建设东西的时候,我决定运行make为 $ make -j 也许是出于与其他软件的习惯,如cabal其中-j默认为一个合理的限度。 大约20秒后,我的整个桌面都停了下来。我寻找各种活动迹象。没有风扇旋转。HDD指示灯呈绿色常亮,但是我听不到磁盘活动。嗯 沉默了10分钟之后,我终于看到了对我几年前做出的第一次按键的反应,并且我也开始听到人们耳熟能详的磁盘颠簸声。20分钟后,我慢慢尝试涉足这台无响应机器上的终端,然后我倒下并使用了REISUB。 起初,我认为一个不相关的桌面应用程序一定是罪魁祸首,因为我早就在交互式bash会话中设置了内存限制,以防止我陷入这种情况!但/var/log/syslog讲述了一个不同的故事; 在OOM杀手留下一些ps垃圾场被怀疑的包装与c++和cc1plus流程! 这是其中一个转储的频率分析: Command Number of appearances 'sh' 322 'c++' 321 'cc1plus' 321 'chrome' 27 'make' 27 'bash' 3 all else combined 120 因此,我检查了GNU make的手册页:(添加了重点) -j [jobs],--jobs [= jobs]指定要同时运行的作业(命令)数。如果有多个-j选项,则最后一个有效。 如果给-j选项不带参数,make将不会限制可以同时运行的作业数量。 我不愿意看到我是否能重现该问题(医生,我这样做时,它会伤害这个 ...) ,但调查的结果似乎到目前为止是一个本垒打:显然,make -j与数百产生过程必须有是挂起和磁盘抖动的原因。也就是说,在互联网上搜索时,我找不到很多警告。我在得出结论吗? 是make -j因为危险的,因为它似乎给我吗? 如果是这样,为什么在地球上呢?如何对它进行白痴验证?

2
Linux内核的内存限制
我有一个困惑的问题。我有一个使用sg执行自定义CDB 的库。有几个系统通常在sg中存在内存分配问题。通常,sg驱动程序的硬限制约为4mb,但是我们在这几个请求〜2.3mb的系统上看到了它。也就是说,CDB正在准备分配2.3mb的传输。这里应该没有任何问题:2.3 <4.0。 现在,机器的配置文件。它是一个64位CPU,但是运行的CentOS 6.0是32位(我没有构建它们,也没有任何与该决定有关的信息)。此CentOS发行版的内核版本为2.6.32。他们有16GB的RAM。 这是系统上的内存使用情况(尽管,由于此错误发生在自动测试期间,所以我尚未验证这是否反映了从sg返回此errno的状态)。 top - 00:54:46 up 5 days, 22:05, 1 user, load average: 0.00, 0.01, 0.21 Tasks: 297 total, 1 running, 296 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: 15888480k total, 9460408k used, 6428072k free, 258280k buffers Swap: 4194296k …

1
为什么OOM-Killer不能杀死要求太多的过程?
在此说明,可以通过overcommit_memory和配置OOM-Killer : 2 =没有过量使用。如果要求太多,分配将失败。 0,1 =过量使用(启发式或始终使用)。当实际访问太多内存时,根据某些启发式方法终止某些进程。 现在,我可能完全误解了,但是为什么没有选项(或者为什么不是默认选项)杀死实际上试图访问它分配的过多内存的进程呢?

3
如何为守护程序永久设置OOM杀手调整?
运行一些带有单个或仅有几个重要系统服务守护程序的Linux服务器,我想为那些守护进程调整OOM杀手,以防万一。例如,今天运行MySQL一些Ubuntu的服务器有一个被杀的MySQL守护程序,因为吨的apt-checker过程中消耗所有的内存和内核认为这是一个好主意,杀的MySQL。 我知道我可以使用该/proc/$(pidof mysqld)/oom_score_adj文件来调整分数,从而为内核提供一些线索,我不希望MySQL被杀死,但这无法在服务重启后幸存下来。我是否应该从软件包中编辑init / upstart脚本以包括这些调整?我认为这不是一个非常优雅的解决方案,因为我会调整属于软件包的文件。是否有可能挂入一般的upstart / init脚本并有条件地进行调整?还是建议您运行一个不确定的脚本while true{ adjust_oom(); sleep 60;}?

2
在OOM杀手/ cgroup杀死进程之前接收信号
在我们的集群中,我们正在限制进程资源,例如内存(memory.limit_in_bytes)。 我认为,最后,这也可以通过Linux内核中的OOM杀手来处理(通过阅读源代码看起来很像)。 在我的进程被杀死之前,有什么方法可以发出信号吗?(就像SGE的-notify选项一样,该选项将在进程终止qsubSIGUSR1之前发送。) 我在/dev/mem_notify 这里了解到有关信息,但我没有它-如今还有其他东西吗?我也读了这篇似乎有些相关的文章。 我希望至少能够转储一个小的堆栈跟踪信息以及其他一些有用的调试信息-但也许我甚至可以通过释放一些内存来恢复。 我当前正在使用的一种解决方法是这个小脚本,该脚本经常检查我是否接近极限(95%),如果是,它将发送过程a SIGUSR1。在Bash中,我将在后台(cgroup-mem-limit-watcher.py &)启动此脚本,以便它监视同一cgroup中的其他proc,并在父Bash进程终止时自动退出。

1
OOM Killer-被杀死的MySQL服务器
在我们的一名MySQL主服务器上,OOM Killer被调用并杀死了导致严重中断的MySQL服务器。以下是内核日志: [2006013.230723] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0 [2006013.230733] Pid: 1319, comm: mysqld Tainted: P 2.6.32-5-amd64 #1 [2006013.230735] Call Trace: [2006013.230744] [<ffffffff810b6708>] ? oom_kill_process+0x7f/0x23f [2006013.230750] [<ffffffff8106bde2>] ? timekeeping_get_ns+0xe/0x2e [2006013.230754] [<ffffffff810b6c2c>] ? __out_of_memory+0x12a/0x141 [2006013.230757] [<ffffffff810b6d83>] ? out_of_memory+0x140/0x172 [2006013.230762] [<ffffffff810baae8>] ? __alloc_pages_nodemask+0x4ec/0x5fc [2006013.230768] [<ffffffff812fca02>] ? io_schedule+0x93/0xb7 [2006013.230773] [<ffffffff810bc051>] ? __do_page_cache_readahead+0x9b/0x1b4 [2006013.230778] …

1
分配给平板的不可回收内存是否被视为已使用或可用的缓存?
在评估/ proc / meminfo之后,我看到以下信息: $cat /proc/meminfo MemTotal: 197852592 kB MemFree: 64755992 kB MemAvailable: 65655112 kB Buffers: 4388 kB Cached: 759952 kB SwapCached: 0 kB Active: 649472 kB Inactive: 308340 kB Active(anon): 193840 kB Inactive(anon): 25316 kB Active(file): 455632 kB Inactive(file): 283024 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4095932 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.