
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;
}
}
}