小编Hub*_*rio的帖子

smem 报告的“内核动态内存”是什么?

在诊断台式机内存不足的问题时(详情见U&L),我注意到我的非缓存“内核动态内存”很大

# smem -twk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.1G     369.3M     801.7M 
userspace memory               2.0G     133.3M       1.9G 
free memory                  734.1M     734.1M          0 
----------------------------------------------------------
                               3.9G       1.2G       2.7G
Run Code Online (Sandbox Code Playgroud)

在另外两个系统上,我检查了它是 150MiB(也是台式机,但有 8GiB 或 RAM)和 29MiB。远不及我台式机的 20%。

我怎样才能找出是什么让它这么大?

顺便说一句:我已经检查了smem源代码,它基本上是这样的(内存总量 - 用户空间 - 免费 - 缓存)。

/proc/meminfo

# cat /proc/meminfo 
内存总量:4051956 kB
MemFree:508276 KB
缓冲区:35232 kB
缓存:651052 kB
交换缓存:121380 KB
活跃:1358008 kB
非活动:1351596 KB
活跃(匿名):1184616 kB
不活动(匿名):886904 …

linux memory-leaks memory

9
推荐指数
1
解决办法
5339
查看次数

使用 `kill -s 0 $pid` 与 `[[ -e /proc/$pid ]]` 来检测 PID 是否正在运行

经常用于检查进程是否正在运行的惯用语之一是使用kill -s 0 $pid.

我的问题是,它比使用[[ -e /proc/$pid ]]构造有什么好处吗?

我正在编写的脚本既针对 Linux 又针对 bash。

linux process kill shell-script process-management

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

报告的已用内存与应用程序内存使用总和之间的差异

我运行相当定期从内存不足遭受桌面系统,这促使我去研究什么导致该问题摆在首位。

问题是,没有一个进程会占用内存,但系统并未将其显示为可用。更重要的是,系统确实进行了交换,因此看起来内存压力是真实的。令人费解的是,在我注销并再次退出后,使用情况恢复正常(使用了约 1GB),因此它看起来像是用户空间和内核之间的一些奇怪的交互,而不是内存泄漏。

简而言之:

  • 报告为 使用的内存free,不包括缓存/缓冲区:3173960 kB
  • 所有应用程序的 USS 总和:2413952 kB
  • 平板大小:158968 kB
  • zram(压缩后):75992 kB

这给出了3173960-2413952-158968-75992 = 525048 kB未计入的内存使用量。

我缺少什么或不计算什么?


应用程序内存使用总和:

# smem -t | sed -n '1p;$p'
  PID User     Command                         Swap      USS      PSS      RSS 
  108 6                                      244524  2413952  2461340  2648488
Run Code Online (Sandbox Code Playgroud)

报告的内存使用情况free

# free -k
             total       used       free     shared    buffers     cached
Mem:       4051956    3449748     602208          0      26548     249240
-/+ buffers/cache:    3173960     877996
Swap:      4051952     242592    3809360
Run Code Online (Sandbox Code Playgroud)

一般内存统计:

# cat /proc/meminfo 
MemTotal:        4051956 …
Run Code Online (Sandbox Code Playgroud)

linux process memory-leaks memory virtual-memory

5
推荐指数
1
解决办法
3495
查看次数