更新时间:2025-04-03 GMT+08:00

修改/dev/shm容量大小

应用场景

/dev/shm由tmpfs文件系统构成,tmpfs是Linux/Unix系统上的一种基于内存的文件系统,故读写效率非常高。

由于CCI 2.0场景/dev/shm默认大小64M无法满足客户诉求,您可通过修改/dev/shm size大小,使用/dev/shm实现进程间数据交互或通过/dev/shm实现临时数据存储。

本操作实践展示通过“memory类型EmptyDir”和“配置securityContext与mount命令”两种方式来修改/dev/shm容量。

限制与约束

  • /dev/shm使用基于内存的tmpfs文件系统,不具备持久性,容器重启后数据不保留。
  • 您可通过两种方式修改/dev/shm容量,但不建议在一个Pod中同时使用两种方式进行配置。
  • EmptyDir所使用的memory从Pod申请的memory中进行分配,不会额外占用资源。
  • 在/dev/shm中写数据相当于申请内存,此种场景下需评估进程内存使用量,当容器内的进程申请内存与EmptyDir中数据量之和超过容器请求的限制内存时,会出现内存溢出异常。
  • 当需要修改/dev/shm容量时,容量大小通常设定为Pod内存申请量的50%。

通过memory类型EmptyDir修改/dev/shm容量

临时路径(EmptyDir):适用于临时存储、灾难恢复、共享运行时数据等场景,任务实例的删除或迁移会导致临时路径被删除。

CCI 2.0支持挂载Memory类型的EmptyDir,用户可通过指定EmptyDir分配内存的大小并挂载到容器内/dev/shm目录来实现/dev/shm的容量修改。

apiVersion: cci/v2
kind: Pod
metadata:  
 name: pod-emptydir-name
spec:  
 containers:   
  - image: 'library/ubuntu:latest'     
    volumeMounts:      
     - name: volume-emptydir1    
       mountPath: /dev/shm   
    name: container-0   
    resources:      
     limits:        
      cpu: '4'      
      memory: 8Gi  
     requests:   
      cpu: '4'    
      memory: 8Gi 
 volumes:   
  - emptyDir:     
     medium: Memory   
     sizeLimit: 4Gi  
    name: volume-emptydir1

待Pod启动后,执行“df -h”指令,进入/dev/shm目录,如下图所示,/dev/shm容量修改成功。

图1 /dev/shm目录详情