主要观点总结
文章讨论了Linux下的内存使用监控,包括top、free命令在物理机或虚拟机环境下的使用,以及容器化应用在K8s中的内存监控。介绍了Linux进程地址空间的分布,内存分配原理,以及K8s中cadvisor的内存监控指标。还讨论了进程的RSS、PageCache、shared memory和mmap文件映射,以及tmpfs和System V IPC共享内存。最后,文章提供了一些监控实践,包括程序自监控内存用量的小技巧,以及容器内存使用量的告警配置。
关键观点总结
关键观点1: Linux内存监控工具
Linux提供了top和free命令用于查看机器和进程的内存使用情况,而在容器环境中,可以使用cadvisor进行监控。
关键观点2: Linux进程地址空间分布
Linux进程地址空间由不同的vm_area_struct(vma)组成,每个vma都有其地址区间,包括堆、栈、共享库等区域。
关键观点3: K8s中的cadvisor监控指标
cadvisor提供了多个内存监控指标,如container_memory_rss、container_memory_cache、container_memory_mapped_file等,这些指标分别代表了容器的不同内存使用情况。
关键观点4: 内存分配与监控实践
Linux的内存分配与监控涉及到malloc、mmap、共享内存等概念,而在容器环境中,需要关注Pod和Container级的memcg内存限制。
关键观点5: 监控实践中的注意事项
使用getrusage系统调用可以自监控进程的资源使用情况,同时需要注意Pod的QoS级别和容器间的Pid Namespace共享。
文章预览
来自公众号: 腾讯技术工程 作者:frostchen 导语 Linux下开发者习惯在物理机或者虚拟机环境下使用top和free等命令查看机器和进程的内存使用量,近年来越来越多的应用服务完成了微服务容器化改造,过去查看、监控和定位内存使用量的方法似乎时常不太奏效。如果你的应用程序刚刚迁移到K8s中,经常被诸如以下问题所困扰:容器的内存使用率为啥总是接近99%?malloc/free配对没问题,内存使用量却一直上涨?内存使用量超过了限制量却没有被OOM Kill? 登录容器执行top,free看到的输出和平台监控视图完全对不上?... 本文假设读者熟悉Linux环境,拥有常见后端开发语言(C/C++ /Go/Java等)使用经验,希望后面的内容能在读者面临此类疑惑时提供一些有效思路。 K8s中监控数据主要来源是 cadvisor , 容器内存使用量的相关指标有以下: 这些指标究竟是什么含
………………………………