标签: memory

dd 的 /proc/meminfo 中存在脏信息

我从这里读到以下命令为我提供了需要写入磁盘的数据量。

\n\n
grep ^Dirty /proc/meminfo\n
Run Code Online (Sandbox Code Playgroud)\n\n

它特别提到,曾经问自己“如果我按下重置按钮,会丢失多少数据?”

\n\n

我想测试上面的命令,所以我做了以下操作。

\n\n
dd if=/dev/urandom of=sample.txt bs=1G count=1\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,在另一个 shell 中我运行了上述命令。

\n\n
grep ^Dirty /proc/meminfo\nDirty:                44 kB\ngrep ^Dirty /proc/meminfo\nDirty:                36 kB\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果我使用它的报告进行文件复制cp

\n\n
grep Dirty /proc/meminfo\nDirty:            387680 kB\ngrep Dirty /proc/meminfo\nDirty:            609172 kB\n
Run Code Online (Sandbox Code Playgroud)\n\n

我从这个页面看到Dirty 做了什么。

\n\n
\n

脏 \xe2\x80\x94 等待写回磁盘的内存总量(以千字节为单位)。

\n
\n\n

为什么Dirty不报告任何尺寸dd

\n

memory io proc

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

overcommit_memory 和 overcommit_ratio

这是我当前的设置:

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

和当前内存使用情况:

[localhost~]$ free -g
             total       used       free     shared    buffers     cached
Mem:            47         46          0          0          0         45
-/+ buffers/cache:          1         45
Swap:           47          0         47
Run Code Online (Sandbox Code Playgroud)

根据文档我的理解是:

vm.overcommit_memory = 2不允许过度使用内存超过 RAM 的 50% (as vm.overcommit_ratio is 50),但我仍然可以看到当前内存使用量为 47 GB 中的 46 GB。

我是不是误会了什么?

linux kernel memory virtual-memory

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

除了使用系统调用之外,我们什么时候会跳转到进程虚拟内存的内核部分?(在Linux中)

这是我上一个问题的后续问题。

根据答案,系统调用是我们跳转到进程虚拟内存的内核部分的一个示例。

  1. 除了系统调用之外,正常进程(非内核)使用这部分虚拟内存的其他示例还有哪些?就像有没有任何函数调用可以直接跳转到这个内核部分或者..?

  2. 当我们跳转到这部分内存时,处理器是否会自动将内核模式位设置为1以便我们的进程访问这部分内存,或者不需要设置该位?

  3. 该内核部分内部的所有执行是否都不需要上下文切换到内核进程?

(我不想在评论中提出这些后续问题,所以我打开了另一个线程。)

在此输入图像描述

linux kernel memory virtual-memory

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

为什么 Linux OOM 杀手会终止我的程序?

我正在通过 bash 脚本运行复杂的工作流程,这些脚本使用外部程序/命令来执行不同的操作。它运行了几个小时,但突然 OOM 杀手终止了我的工作流程或整个 bash 脚本的程序,即使仍然有足够的内存可用。我用 ps 命令每 0.01 秒记录一次内存使用情况,根本没有增加或变化,仍然有几个 GB 可用。但是突然从一个内存快照到下一个内存快照,某个进程被 OOM 杀手终止。这是内存使用情况的典型 ps 快照:

PID     %MEM  RSS      VSZ      COMMAND      USER
139443  1.2   1651768  8622936  java         jadzia
123601  0.1   163352   523068   obabel       jadzia
139355  0.0   5488     253120   srun         jadzia
125747  0.0   5252     365088   obabel       jadzia
125757  0.0   5252     365088   obabel       jadzia
125388  0.0   5224     365088   obabel       jadzia
125824  0.0   3764     267736   obabel       jadzia
21062   0.0   3724     128628   bash         jadzia
125778  0.0   3628     267736   obabel       jadzia
127018  0.0   1904 …
Run Code Online (Sandbox Code Playgroud)

linux memory out-of-memory

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

为什么 Linux 默认会过量使用内存?

与https://superuser.com/questions/200387/linux-overcommit-memory上的超级用户问题相关,我的问题是他们允许默认过度使用的原因是什么?

从 2.5.30 开始,这些值是: 0(默认):和以前一样:猜测多少超额使用是合理的,

linux memory

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

磁盘缓存机制有多智能?

Linux的磁盘缓存(页缓存)用于缓存文件数据并使用尽可能多的RAM。升级服务器的 RAM 后,我下载大文件的速度比磁盘允许的速度要快。但前提是该文件之前已下载过一次,这对我来说绝对是合乎逻辑的:

首次下载:
在此输入图像描述

第二次下载(仅从缓存中下载部分内容?):
在此输入图像描述

第三次下载:
在此输入图像描述

但这是否意味着,一个与我的缓冲区大小一样大或更大的文件,它将覆盖所有更频繁访问的缓存文件?或者是否有一种智能机制可以在不再访问大文件后“重新抓取”那些“热门”文件?

linux performance filesystems memory hard-disk

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

使用“top”显示每个进程的绝对内存使用情况

默认情况下,top将为每个进程显示该进程使用的物理内存的比例:

top - 12:39:34 up 87 days, 18:25,  3 users,  load average: 4.73, 4.89, 4.23
Tasks: 255 total,   2 running, 242 sleeping,   0 stopped,  11 zombie
%Cpu(s): 38.2 us, 37.2 sy,  0.0 ni,  2.8 id, 13.4 wa,  0.0 hi,  8.4 si,  0.0 st
MiB Mem :   3916.2 total,    132.1 free,   3659.9 used,    124.2 buff/cache
MiB Swap:   4096.0 total,   2127.0 free,   1969.0 used.     78.2 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND   
28095 …
Run Code Online (Sandbox Code Playgroud)

memory top

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

time 和 ulimit 命令使用的千字节是 1000 (SI) 还是 1024(老式)字节?

man time

M      Maximum resident set size of the process during its lifetime, in Kilobytes.
Run Code Online (Sandbox Code Playgroud)

ulimit -a

max memory size         (kbytes, -m) unlimited
Run Code Online (Sandbox Code Playgroud)

“千字节”可能意味着 1000 或 1024 字节。我猜这是一轮 1024,但我想确定一下。权威参考将不胜感激。

linux memory resources time ulimit

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

Linux Mint 5.15.0-47-启动时出现“错误:内存不足”

安装 Nvidia 专有驱动程序并重新启动计算机后,此错误开始出现。

我无法通过它,除非重新启动,进入启动选项,然后选择 Linux 5.15.0-41-generic。

错误:内存不足

以下错误消息

Linux Mint 启动选项

Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: HFM512GD3JX013N                         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F48ABFC7-7FE3-4420-9066-CE3173A5459F

Device           Start        End   Sectors   Size Type
/dev/nvme0n1p1    2048    1050623   1048576   512M EFI System
/dev/nvme0n1p2 1050624 1000214527 999163904 476.4G Linux filesystem
Run Code Online (Sandbox Code Playgroud)

boot memory nvidia linux-mint

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

/proc/pid/smaps 中给定进程的 PSS 值多久更新一次

因此,如果 n 个进程共享一个大小为 M 的库 L,那么对它们的 PSS 的贡献是 M/n。

现在想象其中一个进程终止。所以贡献是 M/(n-1)。

问题 1:我的问题是这种变化多久会反映在仍在运行和使用共享库的进程的 PSS 值中?

Q2:作为一个简单的例子,假设只有两个进程在使用大小为 100K 的共享库 L。PSS 对每个进程的贡献是 50K。现在当 P2 死亡时,它是唯一使用 L 的进程。所以它的 PSS 应该增加并变成 100K。这会在多长时间内发生,在 P2 死后,还是在一段时间后?经过多少时间?

linux process kernel memory virtual-memory

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