命令记不住

登陆

Kubernetes 解决 Shm 问题

Kubernetes解决Shm问题

1.问题原因

Pod内java服务启动,过量消耗Share Memory导致宿主机OOM,需要调整medium: Memory

 - name: COMMAND_ARGS
              value: >-
                -Djava.security.egd=file:/dev/./urandom 

/dev/shm在/etc/fstab中挂载,对应tmpfs,实际使用的是内存的空间。默认情况下,/dev/shm为物理内存大小的一半

2.k8s解决方案

          volumeMounts:
            - mountPath: /dev/shm
              name: dshm
   volumes:
        - emptyDir:
            medium: Memory
            sizeLimit: 1Gi
          name: dshm

查看pod内/dev/shm未变化

[root@dp-cms-786f4d7787-llbf6 myencryped]# df -h
Filesystem                           Size  Used Avail Use% Mounted on
tmpfs                                3.9G  258M  3.6G   7% /dev/shm

手工往/dev/shm中写数据测试是否生效

[root@dp-cms-786f4d7787-llbf6 myencryped]# dd if=/dev/zero  of=/dev/shm/test bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 3.67461 s, 285 MB/s

在写完数据后POD退出

[root@dp-cms-786f4d7787-llbf6 myencryped]# ls -alh /dev/shm/ |   grep   total
total 1.3G
[root@dp-cms-786f4d7787-llbf6 myencryped]# command terminated with non-zero exit code: Error executing in Docker Container: 137

实际是生效中

3.docker解决方案

放宽shm-size的大小,启动容器,并进入

docker run -it --shm-size 1024M -v /mnt/mfs/traincodes/test-20200908/V0000001/PytorchSSD/:/app -v /mnt/mfs/data/:/dataset 0f3bd9e6a0c3 bash
upstream kong {
    server 172.16.18.12:8000;
}

server {
    listen 80;
    server_name cmstikr.bonc.local usertikr.bonc.local apitikr.bonc.local searchtikr.bonc.local h5tikr.bonc.local imtikr.bonc.local cdntikr.bonc.local eventtikr.bonc.local commenttikr.bonc.local;
    charset utf-8;

    if ( $time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})" ) {
      set $Y $1;
      set $m $2;
      set $d $3;
    }
    access_log /data/nginx/logs/proxy-access-$Y-$m-$d.log main;

    real_ip_header    X-Forwarded-For;
    set_real_ip_from  192.168.0.0/16;
    set_real_ip_from  172.0.0.0/8;
    set_real_ip_from  10.0.0.0/8;
    real_ip_recursive on;

    client_max_body_size 100m;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://kong;
    }
}
}
推荐阅读