内存问题分析
内存问题分析
找到内存问题的来源后,下一步就是相应的优化工作了。在我看来,内存调优最重要的就是,保证应用程序的热点数据放到内存中,并尽量减少换页和交换。
常见的优化思路有这么几种。
- 最好禁止 Swap。 如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的使用倾向。
- 减少内存的动态分配。比如,可以使用内存池、大页(HugePage)等。尽量使用缓存和缓冲区来访问数据。比如,可以使用堆栈明确声明内存空间,来存储需要缓存的数据;或者用 Redis 这类的外部缓存组件,优化数据的访问。
- 使用 cgroups 等方式限制进程的内存使用情况。这样,可以确保系统内存不会被异常进程耗尽。
- 通过 /proc/pid/oom_adj ,调整核心应用的 oom_score。这样,可以保证即使内存紧张,核心应用也不会被 OOM 杀死。
参考资料
[短视频BS上线大批实例出现OOM现象问题](https://ku.baidu-int.com/knowledge/HFVrC7hq1Q/pKzJfZczuc/Gs4uNFcjEC/gzGld6QZrpsx1t)
[Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令 - 陈咬金 - 博客园](https://www.cnblogs.com/zh94/p/11922714.html)
[技术|在 Linux 上如何清除内存的 Cache、Buffer 和交换空间](https://linux.cn/article-5627-1.html)
[tobert/pcstat: Page Cache stat: get page cache stats for files on Linux](https://github.com/tobert/pcstat)
在 pcstat 基础上做的工具: [silenceshell/hcache: showing top X biggest cache files global](https://github.com/silenceshell/hcache)
本站总访问量次 本站访客数人次 本文总阅读量次