标签: memory

使用 /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
Run Code Online (Sandbox Code Playgroud)

如果这个问题是针对 的并不重要httpdmysqld或者postfix我很好奇如何继续调试问题。

我怎样才能获得更多关于为什么 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          6        103`
Run Code Online (Sandbox Code Playgroud)

linux logs memory out-of-memory

50
推荐指数
2
解决办法
11万
查看次数

如何创建 RAM 使用量有限的用户?

所以我有 4 GB RAM + 4GB 交换。我想创建一个具有有限内存和交换空间的用户:3 GB RAM 和 1 GB 交换空间。这样的事情可能吗?是否可以在不创建单独用户的情况下启动具有有限 RAM 的应用程序并对其进行交换(并且不安装任何特殊应用程序 - 只有默认的 Debian/CentOS 服务器配置,并且不使用 sudo)?

更新:

所以我打开终端并输入ulimit命令:ulimit -v 1000000这就像976,6Mb限制。接下来我打来电话ulimit -a,看到限制是“开启”。然后我开始了一些 bash 脚本,它编译并启动我的应用程序nohup,很 nohup ./cloud-updater-linux.sh >& /dev/null &......但一段时间后我看到:

在此处输入图片说明

(如果没有应用限制就可以了——它下载了一些大的库,并开始编译它。)

但我认为我对 shell 和所有使用它启动的进程应用了限制ulimit -v 1000000?我做错了什么?如何使终端及其启动的所有子进程限制在 ram 使用上?

users memory limit not-root-user

49
推荐指数
2
解决办法
8万
查看次数

加载共享库和 RAM 使用

我想知道 Linux 管理共享库的方式。(实际上,我指的是 Maemo Fremantle,它是 2009 年发布的基于 Debian 的发行版,运行在 256MB RAM 上)。

假设我们有两个可执行文件链接到 libQtCore.so.4 并使用其符号(使用其类和函数)。为简单起见,我们称它们为ab。我们假设两个可执行文件都链接到相同的库。

首先我们启动a. 必须加载库。它是整体加载还是仅在需要的部分加载到内存中(因为我们不使用每个类,只加载有关所用类的代码)?

然后我们启动b. 我们假设它a仍在运行。b也链接到 libQtCore.so.4 并使用一些使用的类a,但也使用a. 库是否会被双重加载(分别为a和单独为b)?或者他们会使用 RAM 中已有的相同对象。如果不b使用新符号并且a已经在运行,共享库使用的 RAM 会增加吗?(或者差异会微不足道)

memory libraries executable ram

48
推荐指数
1
解决办法
3万
查看次数

内存不足时系统挂起

我有一个 eeePC 900a:它有一个 8GB 的​​闪存作为磁盘,只有 1GB 的 RAM。安装在其上的 Linux 发行版是 ArchLinux。

当系统内存不足时,它会变得非常无响应:执行诸如切换到 TTY1 甚至移动鼠标指针之类的操作需要几秒钟/几分钟的时间。有时看起来系统只是冻结了:我们三个之前我就不管了,到目前为止什么都没有改变。

我宁愿避免在这台 eeePC 上创建交换分区/文件,因为磁盘已经那么小,而且交换空间上的许多写入会大大缩短闪存卡的寿命。此外,我认为交换文件/分区只会移动问题,而不是绝对修复它。

内核是否应该在内存不足时杀死一些随机应用程序?为什么这样做会失败(或需要很长时间)?

几个月/几年前,我已经尝试进一步研究这一点,但找不到任何实际可行的方法......

linux memory freeze

47
推荐指数
4
解决办法
3万
查看次数

如何仅在紧急情况下使用交换空间?

我有一台带有8 GB RAM 和 16 GB 交换的 Debian (Buster) 笔记本电脑。我正在运行一个很长的运行任务。这意味着我的笔记本电脑在过去六天里一直处于运转状态。

这样做时,我需要定期将笔记本电脑用作笔记本电脑。这应该不是问题;长时间运行的任务受 I/O 限制,处理 USB 硬盘上的内容,并且不占用太多 RAM (<200 MB) 或 CPU (<4%)。

问题是当我在几个小时后回到我的笔记本电脑时,它会非常缓慢,可能需要 30 分钟才能恢复正常。这太糟糕了,以至于崩溃监视器将它们各自的应用程序标记为已冻结(尤其是浏览器窗口),并且事情开始错误地崩溃。

查看系统监视器,大约一半使用的 2.5 GB 被转移到交换中。我已经通过删除交换空间 ( swapoff /dev/sda8) 来确认这是问题所在。如果我在没有交换空间的情况下离开它,即使在 24 小时后它也几乎立即恢复生机。使用交换,前五分钟实际上是一块砖,只剩下六个小时。我已经确认即使我不在时内存使用量也不会超过3 GB

我尝试将swappiness另见:维基百科)减少到10和的值0,但问题仍然存在。似乎在一天不活动后,内核认为不再需要整个 GUI 并将其从 RAM 中擦除(将其交换到磁盘)。长时间运行的任务是读取庞大的文件树并读取每个文件。因此,内核可能会误以为缓存会有所帮助。但是在一次扫描具有约 10 亿个文件名的 2 TB USB 硬盘时,额外的 GB RAM 不会对性能有太大帮助。这是一款价格低廉的笔记本电脑,硬盘速度很慢。它根本无法足够快地将数据加载回 RAM。

如何告诉 Linux 仅在紧急情况下使用交换空间?我不想在没有交换的情况下运行。如果发生意外情况,并且操作系统突然需要额外的几 GB,那么我不希望任务被杀死,而是希望开始使用交换。但目前,如果我启用交换,我的笔记本电脑就无法在需要时使用。

“紧急情况”的确切定义可能是一个有争议的问题。但要澄清我的意思:紧急情况是系统除了交换或终止进程之外别无选择。


什么是紧急情况?-你真的要问吗?...我希望你永远不会发现自己在燃烧的建筑物中!

我不可能在这个问题中定义可能构成紧急情况的所有内容。但是,例如,紧急情况可能是当内核被如此推入内存以至于它开始使用OOM Killer杀死进程时。当内核认为它可以通过使用交换来提高性能时,不是紧急情况。


最终编辑: 我已经接受了一个答案,该答案正是我在操作系统级别所要求的。未来的读者还应该注意提供应用程序级解决方案的答案。

linux memory swap

47
推荐指数
5
解决办法
5734
查看次数

grep:内存耗尽

我正在做一个非常简单的搜索:

grep -R Milledgeville ~/Documents
Run Code Online (Sandbox Code Playgroud)

一段时间后,出现此错误:

grep: memory exhausted
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这种情况?

我的系统上有 10GB 的 RAM 并且运行的应用程序很少,所以我真的很惊讶一个简单的 grep 内存不足。~/Documents大约100GB,包含各种文件。

grep -RI 可能没有这个问题,但我也想搜索二进制文件。

performance grep memory

45
推荐指数
3
解决办法
4万
查看次数

Unix 命令告诉程序运行时使用了多少 RAM?

假设我正在运行一个脚本(例如在 Python 中)。为了找出程序花费了多长时间,可以运行

time python script1.py
Run Code Online (Sandbox Code Playgroud)

是否有一个命令可以跟踪脚本运行时使用了多少 RAM?为了找到有多少 RAM 可用,可以使用free,但此命令不适合上述任务。

memory command ram

44
推荐指数
2
解决办法
3万
查看次数

有没有办法限制特定进程在 Unix 中可以使用的内存量?

我需要测试一个内存管理过程。

  • 我没有源代码,所以我需要从操作系统端进行所有测试。
  • 我希望能够说类似的话 limitmemory 400k -p <pid>

有没有办法在unix中做到这一点?任何常见的 Unix 实用程序都很棒。

process memory limit

40
推荐指数
4
解决办法
6万
查看次数

获取chrome的总内存使用量

由于 google chrome/chromium 产生多个进程,因此很难看到这些进程总共使用了多少内存。

有没有一种简单的方法可以查看一系列连接的进程使用了​​多少总内存?

memory chrome process-management multithreading

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

vm.swappiness 参数真正控制什么?

根据内核文档:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.
Run Code Online (Sandbox Code Playgroud)

然而,这有点模糊。我试图弄清楚参数最终控制什么。我知道它会调整内核尝试换出页面的积极程度,但它会影响内核代码中的哪些决策过程?

它是否会在内核将其换出之前调整页面必须在多长时间前被访问?如果是这样,默认值 60 代表什么?增加/减少 1 会改变多少(公式会很好)?
或者它是否根据访问频率换出页面?
或者是其他东西?

linux kernel memory swap

37
推荐指数
3
解决办法
1万
查看次数