在实际运行 k8s 过程中,遇到了一些问题,这里进行一下记录。
一、linux 缓存 buffer/cache 导致可用内存不足
这是 linux 的 io 缓存,比如当读写文件时会优先读写缓存,之后再将缓存内容落盘。如果读写的文件非常多,会导致这个缓存不断增大,需要配合一些缓存策略进行优化。
这里我们需要优化一个内核参数:vm.min_free_kbytes,即最小空闲内存保留,当缓存过多导致空闲内存低于这个值时,就会自动释放缓存。
# 查看保留内存大小
sysctl vm.min_free_kbytes
# 设置保留内存=1G(重启后会失效)
sudo sysctl -w vm.min_free_kbytes=1024000
# 永久设置保留内存
sudo echo sysctl -w vm.min_free_kbytes=1024000 >> /etc/sysctl.conf
二、虚拟内存区域不足
虚拟内存区域(VMA)是进程虚拟内存的一个逻辑段落。每个内存映射(mmap)操作、加载的共享库、栈、堆等都会创建一个 VMA。
Elasticsearch 使用 mmap 加载倒排索引文件,对此有最低要求,否则启动不了。
# 查看虚拟内存区域大小
sysctl vm.max_map_count
# 设置虚拟内存区域大小(重启后会失效)
sudo sysctl -w vm.max_map_count=262144
# 永久设置虚拟内存区域大小
sudo echo sysctl -w vm.max_map_count=262144 >> /etc/sysctl.conf