• 内存监控以及优化


    目录

    一、内存分析常用命令

    二、内存一般分析思路

    三、内存优化思路



    一、内存分析常用命令

    1、vmstat 

    vmstat报告有关进程、内存、分页、块IO、陷阱、磁盘和cpu活动的信息。

    1. //每隔1秒打印一次
    2. root@ubuntu:/# vmstat 1
    3. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    4. r b swpd free buff cache si so bi bo in cs us sy id wa st
    5. 0 0 2584 249888 67824 2101164 0 0 184 54 69 126 1 1 98 1 0
    6. 0 0 2584 249888 67824 2101164 0 0 0 0 122 277 1 1 99 0 0
    7. 0 0 2584 249888 67824 2101164 0 0 0 0 111 186 1 1 98 1 0
    8. 0 0 2584 249888 67824 2101164 0 0 0 0 102 169 0 0 99 0 0
    9. 0 0 2584 249888 67824 2101164 0 0 0 0 108 176 0 1 99 0 0
    10. 0 0 2584 249888 67824 2101164 0 0 0 0 124 209 1 0 99 0 0
    11. 0 0 2584 249888 67824 2101164 0 0 0 0 116 197 1 0 99 1 0
    12. 0 0 2584 249888 67824 2101164 0 0 0 0 124 188 0 0 100 0 0
    13. 2 0 2584 249888 67824 2101164 0 0 0 0 166 369 1 1 99 0 0
    14. 0 0 2584 249872 67824 2101164 0 0 0 0 169 294 1 0 99 0 0

    2、sar 

    这条命令非常强大,全面的分析系统性能 包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存的使用情况、进行活动以及IPC有关的活动等

    1. //-r -S 2 查看内存
    2. root@ubuntu:/# sar -r -S 2
    3. Linux 5.13.0-52-generic (ubuntu) 08/08/2022 _x86_64_ (2 CPU)
    4. 12:37:12 AM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
    5. 12:37:14 AM 249944 2124768 1462900 36.73 67824 1989504 4084092 67.18 986588 1929716 0
    6. 12:37:12 AM kbswpfree kbswpused %swpused kbswpcad %swpcad
    7. 12:37:14 AM 2094564 2584 0.12 32 1.24
    8. 12:37:14 AM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
    9. 12:37:16 AM 249944 2124768 1462900 36.73 67824 1989504 4084092 67.18 986588 1929716 0
    10. 12:37:14 AM kbswpfree kbswpused %swpused kbswpcad %swpcad
    11. 12:37:16 AM 2094564 2584 0.12 32 1.24
    12. 12:37:16 AM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
    13. 12:37:18 AM 250072 2124896 1462772 36.73 67824 1989504 4084092 67.18 986588 1929716 0
    14. 12:37:16 AM kbswpfree kbswpused %swpused kbswpcad %swpcad
    15. 12:37:18 AM 2094564 2584 0.12 32 1.24
    16. ^X^C
    17. Average: kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
    18. Average: 249987 2124811 1462857 36.73 67824 1989504 4084092 67.18 986588 1929716 0
    19. Average: kbswpfree kbswpused %swpused kbswpcad %swpcad
    20. Average: 2094564 2584 0.12 32 1.24

    参数,

    1. -r Report memory utilization statistics.//查看内存使用情况
    2. -S Report swap space utilization statistics//swap使用
    3. -n { keyword[,...] | ALL }//网络
    4. Report network statistics.
    5. Possible keywords are DEV, EDEV, FC, ICMP, EICMP, ICMP6, EICMP6, IP, EIP, IP6, EIP6, NFS, NFSD, SOCK,
    6. SOCK6, SOFT, TCP, ETCP, UDP and UDP6.
    7. -d Report activity for each block device.//device设备
    8. -b Report I/O and transfer rate statistics//I/O设备

    3、pidstat

    The  pidstat command is used for monitoring individual tasks currently being managed by the Linux kernel

     

    1. //2秒打印一次,10个周期
    2. root@wy-virtual-machine:~# pidstat 2 10
    3. Linux 5.15.0-43-generic (wy-virtual-machine) 2022年08月08日 _x86_64_ (2 CPU)
    4. 20时52分23秒 UID PID %usr %system %guest %wait %CPU CPU Command
    5. 20时52分25秒 0 14 0.50 0.00 0.00 0.00 0.50 0 rcu_sched
    6. 20时52分25秒 108 792 0.00 0.50 0.00 0.00 0.50 0 systemd-oomd
    7. 20时52分25秒 0 811 0.50 0.00 0.00 0.00 0.50 0 vmtoolsd
    8. 20时52分25秒 0 956 0.00 0.50 0.00 0.00 0.50 1 containerd
    9. 20时52分25秒 1000 2357 0.00 1.00 0.00 0.50 1.00 1 gnome-shell
    10. 20时52分25秒 1000 2547 0.00 0.50 0.00 0.00 0.50 0 ibus-daemon
    11. 20时52分25秒 1000 2565 0.50 0.00 0.00 0.00 0.50 0 vmtoolsd
    12. 20时52分25秒 0 3268 0.00 0.50 0.00 0.00 0.50 0 kworker/0:1-events
    13. 20时52分25秒 0 3273 0.00 0.50 0.00 0.00 0.50 0 pidstat
    14. 20时52分25秒 UID PID %usr %system %guest %wait %CPU CPU Command
    15. 20时52分27秒 0 413 0.00 0.50 0.00 0.00 0.50 0 irq/16-vmwgfx
    16. 20时52分27秒 0 811 0.00 0.50 0.00 0.00 0.50 1 vmtoolsd
    17. 20时52分27秒 0 854 0.00 0.50 0.00 0.00 0.50 1 irqbalance
    18. 20时52分27秒 1000 2897 0.50 0.00 0.00 0.50 0.50 1 gnome-terminal-
    19. 20时52分27秒 0 3268 0.00 0.50 0.00 0.00 0.50 0 kworker/0:1-events
    20. 20时52分27秒 0 3273 0.00 0.50 0.00 0.00 0.50 0 pidstat

    4、memleak

    内存检测工具

    memleak跟踪并匹配内存分配和释放请求,并为每次分配收集调用堆栈。然后,memleak可以打印一份摘要,说明哪些调用堆栈执行了随后未释放的分配。

    1. EXAMPLES:
    2. ./memleak -p $(pidof allocs)
    3. Trace allocations and display a summary of "leaked" (outstanding)
    4. allocations every 5 seconds
    5. ./memleak -p $(pidof allocs) -t
    6. Trace allocations and display each individual allocator function call
    7. ./memleak -ap $(pidof allocs) 10
    8. Trace allocations and display allocated addresses, sizes, and stacks
    9. every 10 seconds for outstanding allocations
    10. ./memleak -c "./allocs"
    11. Run the specified command and trace its allocations
    12. ./memleak
    13. Trace allocations in kernel mode and display a summary of outstanding
    14. allocations every 5 seconds
    15. ./memleak -o 60000
    16. Trace allocations in kernel mode and display a summary of outstanding
    17. allocations that are at least one minute (60 seconds) old
    18. ./memleak -s 5
    19. Trace roughly every 5th allocation, to reduce overhead

    5,bcc相关的命令

    cachestat :这将跟踪四个内核函数并每秒打印摘要。这对于一般的工作负载特性描述和查找操作使用随时间变化的模式非常有用。

    cachetop :查看缓存读写命中

    1. root@ubuntu:/# cachestat
    2. HITS MISSES DIRTIES HITRATIO BUFFERS_MB CACHED_MB
    3. 0 0 0 0.00% 67 1946
    4. 1 0 0 100.00% 67 1946
    5. 0 0 0 0.00% 67 1946
    6. root@ubuntu:/#cachetop
    7. 00:51:54 Buffers MB: 67 / Cached MB: 1946 / Sort: HITS / Order: descending
    8. PID UID CMD HITS MISSES DIRTIES READ_HIT% WRITE_HIT%
    9. 5905 root ls 612 0 0 100.0% 0.0%
    10. 5905 root bash 181 0 0 100.0% 0.0%
    11. 1895 wy gsd-housekeepin 4 0 0 100.0% 0.0%
    12. 5902 root cachetop 4 0 0 100.0% 0.0%
    13. 754 root vmtoolsd 1 0 0 100.0% 0.0%

    还有常见的 free top命令等。

    二、内存一般分析思路

    1. 先用free和top查看系统的内存使用情况
    2. 用vmstat,sar和pidstat,查看内存变化趋势
    3. 详细分析,内存分配,缓存/缓冲区,swap ,具体进程内存使用,内存泄漏。

    三、内存优化思路

    1.  ​​​​​禁用swap,减少内存回收时swap的使用
    2. 减少内存动态分配,可以使用内存池,大页等
    3. 尽量使用缓存和缓冲区来访问数据。可以使用堆栈明确声明内存空间,来存储需要缓存的数据;使用radis优化数据访问
    4. 使用cgroup等限制进程的内存使用情况,确保系统内存不会被异常进程耗尽
    5. 通过/proc/pid/oom_adj,调整核心应用的oom_socre,不会被OOM

    参考链接

    https://course.0voice.com/v1/course/intro?courseId=2&agentId=0


  • 相关阅读:
    Flink cdc 2.3.0 日前发布,支持众多新特性
    股票python量化交易011-JQData财务相对估值指标
    数据库(mysql)之用户管理
    【Altium Designer21】输出GERBER文件
    攻防世界WEB练习区(backup、cookie、disabled_button)
    pyTorch——基础学习笔记
    网安学习-应急响应3
    基于Python+OpenCV高速公路行驶车辆的速度检测系统
    HDMI 基于 4 层 PCB 的布线指南
    Promise
  • 原文地址:https://blog.csdn.net/WANGYONGZIXUE/article/details/126201405