作者:悟哩兰荷_982 | 来源:互联网 | 2023-09-25 17:08
一、怎么样衡量系统内存1、查看系统内存的使用情况,比如已用内存,剩余内存,共享内存,可用内存,缓存和缓冲区的用量。*已用内存和剩余内存,就是已经使用和还未使用的内存。*共享内存,是
一、怎么样衡量系统内存1、查看系统内存的使用情况,比如已用内存,剩余内存,共享内存,可用内存,缓存和缓冲区的用量。
- 已用内存和剩余内存,就是已经使用和还未使用的内存。
- 共享内存,是通过tmpfs来实现的,它的大小就是tmpfs使用的内存大小,tmpfs其实也是一种特殊的缓存。
- 可用内存,就是新进程可以使用的最大内存,包括剩余内存和可回收内存
- 缓存,缓存包括磁盘读取文件的页缓存和Slab分配器中的可回收内存。页缓存用来缓存从磁盘读取的数据。
- 缓冲区,是对原始磁盘块的l临时存储,用来缓存将要写入磁盘的数据,这样内核就可以把分散的写集中起来,统一优化磁盘写入。
2、查看进程内存的使用情况,比如进程的虚拟内存,常驻内存,共享内存已经swap内存。
二、内存的性能分析工具
1、更具内存指标找对应的工具
2、根据性能工具看内存指标
三、定位内存问题为了快速定位内存问题,通常我会先运行几个覆盖率比较大的性能工具,比如free,top,vmstat,pidstat具体的思路如下:
- 先用free和top查看系统整体d的内存使用情况。
- 再用vmstat和pidstat,查看一段时间的趋势,从而判断内存问题的类型。
- 最后进行详细分析,比如内存分配分析,缓存/缓冲区分析,具体进程的内存使用分析等。
四、常用优化思路
- 最好禁止swap,如果必须开启swap,降低swapiness的值,减少内存回收时swap的使用倾向。
- 减少内存的动态分配,比如可以s使用内存池,大页(HugePage)等。
- 尽量使用缓存和缓冲区来访问数据,比如,可以使用堆栈明确声明内存空间,来存储需要缓存的数据。或者使用redis这类的外部缓存组件,优化数据访问。
- 使用cgroups方式来限制内存使用情况,这样,可以确保系统内存不会被异常进程耗尽。
- 通过/proc/pid/oom_adj,调整核心应用的oom_score,这样,可以保证即使内存紧张,核心应用也不会被OOM杀死。
快速定位系统内存问题的思路