Linux性能优化之(3)如何快速找出系统内存的问题
内存的性能指标:
如何迅速定位内存问题:
- 先用free和top,查看系统整体的内存使用情况
- 再用vmstat和pidstat,查看一段时间的趋势,从而判断出内存问题的类型
- 最后进行详细分析,比如内存分配分析、缓存/缓冲区分析、具体进程的内存使用分析等
分析过程,画成了如下的流程图:
如何优化?:
内存调优最重要的就是,保证应用程序的热点数据放在内存中,并尽量减少换页和交换
- 最好禁用swap。如果必须开启swap,降低swappniess的值,减少内存回收时Swap的使用倾向
- 减少内存的动态分配。比如,可以使用内存池、大页等
- 尽量使用缓存和缓冲区来访问数据。比如,可以使用堆栈明确申明内存空间,来存储需要的缓存的数据;或者使用redis这类的外部缓存组件,优化数据的访问
- 使用 cgroups等方式限制进程的内存使用情况。这样,可以确保系统内存不会被异常进程耗尽
- 通过/proc/pid/oom_adj,调整核心应用的oom_score。这样,可以保证即使内存紧张,核心应用也不会被OOM杀死