哪些共享内存不受SHMAX/SHMALL控制?

哪些共享内存不受SHMAX/SHMALL控制?

我们正在调试一种情况,其中缓存/共享内存不断增加,直到系统达到 OOM-killer。

我们在sysctl.conf中设置了shmax和shmall,但没有任何明显的效果。我们是否需要启用更多功能才能使 shmax/shmall 正常工作?或者系统的某些部分是否可以超出这个限制,执行的力度有多大?有缺陷的用户空间应用程序或仅内核/驱动程序中的错误会导致它吗?我们调试的应用程序使用图形和视频解码。司机可以超越最大限制吗?

kernel.shmmax = 2147483648
kernel.shmall = 524288

Linux 内核是 5.15.71(来自 Yocto meta-intel)。我们的系统有 4GB 内存,没有交换(我们尝试启用交换,但它对系统的稳定性没有帮助)。我们使用 Wayland/weston 但不使用 systemd。我们在 sysctl.conf 中设置该值并重新启动以使其生效。我们还通过 ipcs 确认了这些值。我们尝试将共享内存设置为最大 2 GB。

ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 2097152
max total shared memory (kbytes) = 2097152
min seg size (bytes) = 1

以下是 free、meminfo、smem 等在达到 OOM 之前几分钟的一些示例输出。

free -w                                                                    
               total        used        free      shared     buffers       cache   available
Mem:         3844036      479428      263444     2711864       11324     3089840      585716
Swap:              0           0           0                                  

#### cat /proc/meminfo
MemTotal:        3844036 kB
MemFree:          262680 kB
MemAvailable:     584940 kB
Buffers:           11324 kB
Cached:          3055620 kB
SwapCached:            0 kB
Active:            98764 kB
Inactive:         645792 kB
Active(anon):        732 kB
Inactive(anon):   394288 kB
Active(file):      98032 kB
Inactive(file):   251504 kB
Unevictable:     2708620 kB
Mlocked:             100 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                12 kB
Writeback:             0 kB
AnonPages:        386388 kB
Mapped:           162732 kB
Shmem:           2711864 kB
KReclaimable:      34208 kB
Slab:              68656 kB
SReclaimable:      34208 kB
SUnreclaim:        34448 kB
KernelStack:        4640 kB
PageTables:         5904 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1922016 kB
Committed_AS:    4068728 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       15104 kB
VmallocChunk:          0 kB
Percpu:             1040 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:       72236 kB
DirectMap2M:     3938304 kB
DirectMap1G:     2097152 kB



#### smem                                                                     
  PID User     Command                         Swap      USS      PSS      RSS  
 …..
 1306 weston   /usr/libexec/wpe-webkit-1.1        0    27192    51419    98928  
 1379 weston   /usr/libexec/wpe-webkit-1.1        0   190268   214958   266040  

Area                           Used      Cache   Noncache                       
firmware/hardware                 0          0          0                     
kernel image                      0          0          0                       
kernel dynamic memory       3030848    2938432      92416                     
userspace memory             555656     162732     392924                     
free memory                  257532     257532          0

Map                                       PIDs   AVGPSS      PSS              
……
/usr/lib/libcrypto.so.3                     20      527    10544                
/usr/lib/dri/iris_dri.so                     5     2196    10982              
/usr/lib/dri/iHD_drv_video.so                1    20356    20356              
/usr/lib/libWPEWebKit-1.1.so.0.2.6           5    14539    72697              
[heap]                                      45     2060    92700              
<anonymous>                                 45     5970   268688    

编辑:为 tmpfs 添加了 df 信息。使用 df 显示的 tmpfs 挂载没有显示任何异常大小增加。

/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       9.8G  1.9G  7.4G  21% /
devtmpfs        1.9G  2.1M  1.9G   1% /dev
tmpfs           1.9G  636K  1.9G   1% /run
tmpfs           751M  5.8M  745M   1% /var/volatile
tmpfs            40K     0   40K   0% /mnt/.psplash

答案1

SHMAX 和 SHMALL 不会限制您杂项的大小临时文件系统

由于 tmpfs 完全存在于页面缓存和交换中,因此所有 tmpfs 页面将在 /proc/meminfo 中显示为“Shmem”,在 free(1) 中显示为“Shared”。

使用该实用程序检查df您的系统上实际安装了多少个文件系统,并最终通过size=相应安装操作的参数限制其最大可能大小。

当然,如果您的应用程序使用这种文件系统并且没有可用的交换空间,则应用程序很可能会阻止或停止处理,因为它找不到设备上剩余的任何空间。

相关内容