标签: memory

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

如何手动增加内存使用量?

我们的服务器上有 Solaris 10 操作系统,我想在这台服务器上进行测试。对于此测试,内存使用率应该很高。

所以我想知道是否有一种简单的方法可以手动增加内存使用量?

solaris memory

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

Linux内存使用情况?

我们在托管 SAP 应用程序的服务器上有 1TB 内存。

当应用程序运行时,显示的内存使用top量约为 700GB。当应用程序停止时,显示的内存使用量top降至 10GB。服务器重新启动后,内存使用量将达到 1GB。

  • 即使没有应用程序正在运行,为什么top在重新启动后显示已使用 10GB 并获得 9GB?
  • 是否有可能在不重启的情况下获得 9GB?

的输出free -g

free -g 
                 total used   free shared buffers cached 
Mem:              1009  567   442    0      0     152 
-/+ buffers/cache:      415   594 
Swap:              1     0     1
Run Code Online (Sandbox Code Playgroud)

linux memory linux-kernel

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

查找占用大量内存且在`ps` 或类似内容中不可见的内容

我有一个存在内存问题的虚拟机。我想在其中运行的任务之一是因内存不足错误而崩溃。

然而,当它崩溃时,系统仍然保持内存不足。我不确定这是否只是我遗漏的一个进程,还是一个实际的错误(这是在 hyper-v 中,具有允许 linux 主机内存膨胀的新内核扩展,因此它很可能是一个真正的内核错误)。

durr@sqlbox:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          3.1G       2.6G       541M        88K       7.4M        39M
-/+ buffers/cache:       2.5G       588M
Swap:         1.0G       6.2M       1.0G
Run Code Online (Sandbox Code Playgroud)

Free 告诉我,它不只是缓存,实际上有一些东西似乎正在占用 2.6G 内存。

但是,查看按虚拟大小排序的 PS 输出并不具有启发性:

durr@sqlbox:~$ ps -e ax -o pid,vsz,comm | sort --numeric-sort --key=2
[ ... snip ... ]
  PID    VSZ COMMAND
   96      0 rcuob/23
   97      0 rcuob/24
   98      0 rcuob/25
   99      0 rcuob/26
 1124   4368 acpid
59863  10016 ps
 1031  15668 upstart-file-br
 1047  15820 getty
 1050 …
Run Code Online (Sandbox Code Playgroud)

memory out-of-memory

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

有没有一种简单的方法可以查看程序运行后的最高资源使用率(CPU、内存甚至带宽)?

我知道我可以top用来查看整体实时 CPU 和内存使用情况,
以及nload整体实时带宽使用情况。

但我希望查看程序运行后的最大(或平均)CPU、内存和带宽使用情况。
就像time my_command在程序时间花费估算中所做的一样。

在 Linux/Unix 中是否有一种简单的方法可以做到这一点?

cpu memory monitoring bandwidth

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

一个进程如何吃更多/更少的虚拟内存(根据顶部)然后页面大小可用?

操作系统在物理内存上运行,并为每个进程提供单独的虚拟地址空间,用于存储数据。使虚拟内存和物理内存之间的传输更容易。
操作系统将内存的一部分(它本身不需要)划分为页面。因此,与进程交互的虚拟地址空间是这些页面的倍数。

为什么这不是真的?为什么实际内存消耗(如我的top)不是倍数,

PID    VIRT     TIME+  COMMAND
  986  212076  11:22.29 Xorg
 1194  504916   1:56.15 pulseaudio
 1252  445884   0:13.69 xfce4-terminal
  827    4256   0:08.16 acpid
Run Code Online (Sandbox Code Playgroud)

页面大小,我的操作系统使用?

acpid使用 4256 字节的虚拟内存。getconf PAGESIZE显示我的系统使用了 4096 字节 (4KiB) 的页面大小

memory virtual-memory

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

脚本使用了多少 RAM、磁盘空间和 CPU 时间

我的问题

我需要找出我编写的 bash 脚本需要多少资源。我主要对以下内容感兴趣:

  • 内存

  • 峰值磁盘使用量(磁盘空间)

  • CPU 时间:虽然在这里我不确定这究竟是指整个 CPU(包括物理 + 虚拟内核?)或仅使用的内核的执行时间。例如,我如何知道具有不同内核数的 CPU 需要多少 CPU 时间?

  • 使用的核心数

这样做的原因是,我将向集群提交作业。每个作业都使用稍微更改的参数执行我的脚本。

我的计划如下,我在我的电脑上执行脚本以获取上述资源的峰值,然后确保仅使用具有所需资源量的集群节点。

或者甚至在脚本执行期间我将所需的内容写入某个文件更好。

尝试的解决方案

到目前为止我做了什么:

RAM:在我的脚本中测量被调用程序的峰值 RAM,我猜测它具有最大的 RAM 使用量。(这是一个Mathematica脚本,我在其中使用了MaxMemoryUsed[]我后来从日志文件中提取的命令)

磁盘空间:我基本上使用du -sb. 而且,我还使用了df前后脚本。

CPU 时间:在我设置的脚本开始SECONDS=0echo ${SECONDS}结束时(因为脚本是我唯一运行的,所以它应该对应于 CPU 时间?!)。我也曾经date得到一个粗略的估计。

我感谢所有的提示、评论和指向工具的指针以及我的问题的可能解决方案。

编辑

我也听说过valgrind。有没有人有这方面的经验。是否可以将其用于我的目的?

memory disk-usage cpu-usage

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

为什么堆栈 VMA 必须是可执行的?

我目前正在阅读Robert Love 的Linux Kernel Development

在“15 进程地址空间”一章中,他打印了进程的内存映射。

user@machine:~$ pmap 1424
#all the processes mapped memory (skipped for readability)
bfffe000 (8KB)        rwxp (0:00 0)         [ stack ]
Run Code Online (Sandbox Code Playgroud)

最后一行显示堆栈(随着它向下增长)。
他现在说:

堆栈自然是可读、可写和可执行的——否则没有多大用处。

据我所知,我们将堆栈用于数据和代码地址(函数及其参数/变量)。

我不明白为什么堆栈必须是可执行的?

process kernel memory stack

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

Overcommit_memory =0 中的启发式算法是什么意思?

我通读了 man proc 的文档。当谈到 overcommit_memory 时,overcommit_memory=0 中的启发式不太好理解。启发式实际上是什么意思?

“不检查使用 MAP_NORESERVE 调用 mmap(2)”是否意味着内核只分配虚拟内存而不知道交换空间的存在?

该文件包含内核虚拟内存记帐模式。值是:

                     0:启发式过量使用(这是默认设置)
                     1:总是过量使用,从不检查
                     2:始终检查,永远不要过度使用

              模式0下,不检查mmap(2)和MAP_NORESERVE的调用,默认检查很弱,导致风险
              获得一个进程“OOM 杀死”。

除了前面的问题,虚拟地址空间耗尽是否会导致 OOM,而不管剩余的物理内存是否足够。

谢谢。

kernel memory out-of-memory

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

为什么 Linux 不会自动清理磁盘缓存和交换?

例如,当我归档一些文件(使用 tar)时,Linux 使用了相当多的磁盘缓存(和一些交换),但在操作完成后从不清理它。结果,因为没有可用内存,Linux 会尝试从内存中换出一些东西,这反过来又会给 CPU 带来额外的负载。

当然,我可以通过运行来清理缓存,echo 1 > /proc/sys/vm/drop_caches但我必须这样做是不是很愚蠢?

更糟糕的是交换,没有命令来清理未使用的交换,我必须完全禁用/启用它,我认为这根本不是一件安全的事情。

更新:

我进行了一些测试并发现了一些事情:

  1. 在归档命令期间换出的内存页面与归档文件无关,这似乎只是一个普通的换出过程,这是由于可用内存减少(因为磁盘缓存把它全部吃光了)根据swappiness

  2. 运行swapoff -a实际上是安全的,这意味着交换的页面将移回内存

我当前的解决方案是通过 cgroups 限制归档命令内存使用(我运行带有-m标志的docker 容器)。如果您不使用 docker,有一个项目https://github.com/Feh/nocache可能会有所帮助。

剩下的问题是Linux 什么时候会清理磁盘缓存,会不会呢?如果没有,手动清理磁盘缓存 ( echo 1 > /proc/sys/vm/drop_caches)是一个好习惯吗?

linux memory swap disk caching

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