标签: memory-usage

cgroup 中报告的内存使用情况与 free 命令不同

为什么 free 命令报告的内存使用量与 cgroup 的内存使用量有很大不同?

$ free -b 
              total        used        free      shared  buff/cache   available
Mem:     2096914432   520863744  1112170496    35389440   463880192  1356828672
Swap:    2145382400           0  2145382400

$ cat /sys/fs/cgroup/memory/memory.usage_in_bytes 
857239552
Run Code Online (Sandbox Code Playgroud)

cgroups 的文档说 memory.usage_in_bytes 是一个“模糊值”。我猜这只是意味着它报告的估计值接近实际值。即使这是一个估计,我认为也不应该相差这么远。

我在 VirutalBox 虚拟机中运行 Linux Mint 18.2。

linux memory-usage cgroup

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

为什么MemAvailable比MemFree+Buffers+Cached少很多?

我正在运行一个没有交换的 Linux 工作站,并且我已经安装了earlyoom守护进程,以便在 RAM 不足时自动终止一些进程。它earlyoom通过监视内核MemAvailable值来工作,如果可用内存变得足够低,它会杀死不太重要的进程。

这已经工作了很长一段时间,但突然间我遇到了MemAvailable与系统其他部分相比突然非常低的情况。例如:

$ grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached):' /proc/meminfo 
MemTotal:       32362500 kB
MemFree:         5983300 kB
MemAvailable:    2141000 kB
Buffers:          665208 kB
Cached:          4228632 kB
Run Code Online (Sandbox Code Playgroud)

请注意 MemAvailable 远低于MemFree+ Buffers+ Cached

我可以运行任何工具来进一步调查为什么会发生这种情况吗?我觉得系统性能比正常情况要差一些,我不得不停止该服务,因为除非稳定(即它正确地描述了用户模式进程的可用内存),earlyoom否则它的逻辑将无法工作。MemAvailable

根据https://superuser.com/a/980821/100154 MemAvailable 是对可用于启动新应用程序(无需交换)的内存量的估计。由于我没有交换,这是什么意思?这是否意味着在触发 OOM Killer 之前新进程可以获取的内存量(因为这在逻辑上会遇到“交换已满”的情况)?

我曾假设MemAvailable>=MemFree总是正确的。不在这里。

附加信息:

在互联网上搜索表明,原因可能是打开的文件不受文件系统支持,因此无法从内存中释放。该命令sudo lsof | wc -l输出653100所以我绝对无法手动浏览该列表。

顶部sudo slabtop

 Active / Total Objects (% used) …
Run Code Online (Sandbox Code Playgroud)

linux debugging kernel memory-usage

7
推荐指数
1
解决办法
9607
查看次数

在 Windows 上从命令行确定可用内存

我想监视四台机器上的可用内存,每台机器都运行 Windows Server 2003 R2 SP2 64 位。每个盒子有 31.7GB 的 RAM。我想定期运行一个命令行工具,这样我就可以收集输出,然后用它制作图表。

我使用 Cygwin 定期运行了一些测试并收集了 vmstat 输出。我看到这样的数字:

0  0 1235228 4194303      0      0    0    0     0     0 4652 3089  1  5 94  0
0  0 1235228 4194303      0      0    0    0     0     0 4718 7591  5  4 91  0
0  0 1235228 4194303      0      0    0    0     0     0 5027 7816  5  4 92  0
0  0 1235228 4194303      0      0    0    0     0     0 4886 7099  3  3 93  0 …
Run Code Online (Sandbox Code Playgroud)

windows-server-2003 performance-monitoring vmstat diagnostic memory-usage

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

apache 吃掉每个孩子太多的 ram

我有一个休闲问题:Apache 每个孩子吃很多 ram。

闲置的评论显示:

  1. cat /etc/redhat-release -- Fedora 8 (狼人)

  2. 免费-m:

             total       used       free     shared    buffers     cached
Mem:          3566       3136        429          0        339       1907
-/+ buffers/cache:        889       2676
Swap:         4322          0       4322
Run Code Online (Sandbox Code Playgroud)

我知道你会说没有什么可担心的,因为交换不使用,但我认为它现在不使用。

3.httpd -v:

服务器版本:Apache/2.2.14 (Unix)

4.httpd -l:

在模块中编译:

核心文件

mod_authn_file.c

mod_authn_default.c

mod_authz_host.c

mod_authz_groupfile.c

mod_authz_user.c

mod_authz_default.c

mod_auth_basic.c

mod_include.c

mod_filter.c

mod_log_config.c

mod_env.c

mod_setenvif.c

mod_version.c

mod_ssl.c

前叉

http_core.c

mod_mime.c

mod_status.c

mod_autoindex.c

mod_asis.c

mod_cgi.c

mod_negotiation.c

mod_dir.c

mod_actions.c

mod_userdir.c

mod_alias.c

mod_rewrite.c

mod_so.c

5.加载的动态模块列表:

LoadModule authz_host_module

模块/mod_authz_host.so LoadModule

include_module 模块/mod_include.so

LoadModule log_config_module

模块/mod_log_config.so LoadModule …

memory-usage apache-2.2

6
推荐指数
1
解决办法
2624
查看次数

查找用于设置 MaxClients 的单个 Apache 进程的平均大小

pgrep apache2在运行 Apache 的 ubuntu 10.4 上尝试了 pmap |grep total 并且 o/p 是这样的:

总计 47768K

总计 48048K

总计 48048K

总计 48048K

总计 48048K

总计 48048K

这是否意味着每个子进程占用 48 MB 的内存。你能帮我找到每个进程的确切内存使用情况吗。期待回复

memory-usage apache-2.2

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

当占用太多内存时自动挂起/休眠进程

我在具有 16GB RAM 的 8 核 PC 上运行一个小型 Debian 计算集群。我正在运行大约 1k 个任务的批次(每个批次的总预期时间为一个月)。单个任务是单线程的(因此我可以在每台 PC 上并行运行多个任务),不消耗太多 IO(启动时加载几兆字节的数据,退出时转储几兆字节的数据;不与外界通信否则),它的运行时间是未知的(从几分钟到~一周),它的内存消耗是未知的(从几兆字节到~8GB;使用可能会缓慢或快速增长)。我想在一台 PC 上并行执行尽可能多的此类任务,但我想避免过度交换。

所以我有了一个想法:我可以监视这些任务的内存使用情况,并暂停 ( kill -SIGSTOP) 或休眠(使用像CryoPID 之类的工具)任务,这些任务消耗了太多内存,无法稍后重新启动。我所说的内存使用是指“活动虚拟页面”的数量,或分配的数量,而不是实际被触及的共享内存页面(这些任务可能会在不使用它们的情况下分配内存)。

我开始寻找一些工具来做到这一点。我知道我可以ulimit或在内存受限的 cgroup 中运行任务,但是——如果我理解正确的话——这些解决方案将终止进程而不是挂起它。我想避免杀死它们,因为稍后我需要从头开始,这意味着浪费时间。此外,它们实际上无法测量活动虚拟页面的数量。

我可以使用真正的虚拟机,但在这种情况下它们似乎有很大的开销——拥有单独的内核、内存分配等会减少可用内存;我必须运行其中的 8 个。此外,据我所知,他们也会增加计算开销。

我想,实现这种行为的工具会将某些功能与页面错误通知挂钩,该通知将决定每个页面错误是否是暂停进程的时间。但我也不知道有任何工具可以以这种方式工作。

还有其他选择吗?

linux virtual-memory memory-usage

6
推荐指数
1
解决办法
1448
查看次数

Docker + Apache,内存使用情况如何?

假设我有一个 docker 主机,其中设置了 50 个容器,每个容器运行一个由 Apache 提供服务的站点。

据我了解,每个容器都会运行一个 Apache 实例,通常每个 Apache 实例每 ram 使用 ~250mb。Apache 然后每个子进程需要几 mb。

假设每个容器都需要完整 Apache 实例的内存,我是否正确?例如。50 个站点需要 50 x ~300mb?

或者 Apache 是否能够在容器之间共享部分内存以提高内存效率?

Docker 是否适合高效的“大规模”托管(例如,大量站点,每个站点都需要很少的资源),其中每个站点都是一个容器?或者只让一个 Apache 容器服务于 50 个站点是否可行?

memory memory-usage apache-2.2 docker

6
推荐指数
2
解决办法
7048
查看次数

docker stats 输出与 top 输出有何关系?

我有一个进程在 Linux 上的 Docker 容器中运行,内存限制为 2GByte。(容器以 开头docker run --memory=2g。)

以下是top它运行一段时间后的情况。

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 9016 root      20   0 7342132 4.652g 4.224g S 100.0  7.4  18828:28 blah
Run Code Online (Sandbox Code Playgroud)

这是输出docker stats

CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
d7032e5928b6        100.02%             2.076 GB/2.147 GB   96.68%              345 MB/199.1 MB
Run Code Online (Sandbox Code Playgroud)

然后,重新启动后top

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5653 root      20   0 2787800 …
Run Code Online (Sandbox Code Playgroud)

top memory-usage docker

6
推荐指数
1
解决办法
3442
查看次数

如果没有对 Ubuntu 服务器应用手动更改,如何分配 RAM 和 CPU

我们有一个运行 R-Studio Server 的 Ubuntu Server (16.04),我们在其中进行统计模拟。这些模拟有时对 RAM 和 CPU 影响很大,所以我想知道内核如何分配内存和 RAM,例如,如果两个用户登录并且他们每个人都运行一个单独的 R 会话,在那里他们“竞争”内存和 CPU。

由于我们都不是服务器管理员,因此我们并不真的想应用手动更改,但是我们感兴趣的是 RAM 和 CPU 分配是否更不等于所有用户。

注意:R-Studio Server Pro 版本允许以非常简单的方式为单个用户分配给定数量的内存,但由于我们没有 Pro 版本,我们无法更改这些设置。

ubuntu memory central-processing-unit cpu-usage memory-usage

6
推荐指数
2
解决办法
1240
查看次数

journald memory usage on CentOS 7

I have an AWS EC2 instance running a CentOS 7.7.1908 (systemd 219) with a server application. The server logs quite a lot of information to the system logs (using syslog).

I have recently enabled persistent storage of the system logs using this answer. Since then, the memory consumption of systemd-journald is constantly growing.

After a full day, systemd-journald ends up using more than 250M of RAM.

我做了一个快速测试来确认 Journald RAM 使用量实际上在增长。

测试 :

  • 获取systemd-journald内存使用情况
  • 使用以下命令将一堆数据记录到系统日志中logger
  • 获取 …

centos memory-usage systemd journald

6
推荐指数
0
解决办法
3482
查看次数