zoukankan      html  css  js  c++  java
  • linux系统下used内存被那个进程占用了?

    关于used下的内存使用情况分析
     
    1、来由
          开发同事反应本机没有做什么,内存就占用了11G,也不知道是什么进程占用了,为此我展开了used内存占用的分析,上数据图
          # free -m
                       total       used       free     shared    buffers     cached
          Mem:         32111      11316      20794          0        157       1396
          -/+ buffers/cache:       9762      22348
          Swap:         8047         64       7983
    2、原因分析
          针对此问题,我及时查看哪个进程占用
          # ps aux | head -1; ps aux| sort -rnk 4 | head -10
          USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
          zabbix   22866  0.0  0.0  78244  1836 ?        S    Jan18   0:27 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
          zabbix   22865  0.0  0.0  78244  1856 ?        S    Jan18   0:27 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
          zabbix   22864  0.0  0.0  78244  1852 ?        S    Jan18   0:27 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
          zabbix   22863  0.0  0.0  78120  1924 ?        S    Jan18   0:59 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
          zabbix   22861  0.0  0.0  78120   768 ?        S    Jan18   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
          USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
          rtkit     2855  0.0  0.0 168452   844 ?        SNl   2020   4:55 /usr/libexec/rtkit-daemon
          rpcuser   2212  0.0  0.0  23344   740 ?        Ss    2020   0:00 rpc.statd
          rpc       2092  0.0  0.0  18972   604 ?        Ss    2020   0:16 rpcbind
          root        99  0.0  0.0      0     0 ?        S     2020   0:00 [kintegrityd/9]
          但是没有找到问题点,继续
          查看/proc/meminfo文件时
          # cat /proc/meminfo  未启动java时     启动java后
          MemTotal:       32882392 kB         32882392 kB
          MemFree:        11152484 kB         9941460 kB
          Buffers:          174520 kB         175588 kB
          Cached:          1485864 kB         1508656 kB
          SwapCached:         5100 kB         5092 kB
          Active:         10906000 kB         12098640 kB
          Inactive:         845964 kB         859936 kB
          Active(anon):   10088872 kB         11271860 kB
          Inactive(anon):     4448 kB         4448 kB
          Active(file):     817128 kB         826780 kB
          Inactive(file):   841516 kB         855488 kB
          Unevictable:           0 kB
          Mlocked:               0 kB
          SwapTotal:       8241144 kB       8241144 kB
          SwapFree:        8174820 kB       8174828 kB
          Dirty:               980 kB       1472 kB
          Writeback:             0 kB
          AnonPages:      10090488 kB       11275588 kB
          Mapped:            35960 kB       35964 kB
          Shmem:              1600 kB       1600 kB
          Slab:            9708836 kB       9709656 kB
          SReclaimable:    8982448 kB       8982488 kB
          SUnreclaim:       726388 kB       727168 kB
          KernelStack:        5592 kB       5888 kB
          PageTables:        34344 kB       36660 kB
          NFS_Unstable:          0 kB
          Bounce:                0 kB
          WritebackTmp:          0 kB
          CommitLimit:    24682340 kB       24682340 kB
          Committed_AS:   21549588 kB       21577332 kB
          VmallocTotal:   34359738367 kB    34359738367 kB
          VmallocUsed:      200220 kB       200220 kB
          VmallocChunk:   34341972664 kB    34341972664 kB
          HardwareCorrupted:     0 kB
          AnonHugePages:   9539584 kB       10670080 kB
          HugePages_Total:       0
          HugePages_Free:        0
          HugePages_Rsvd:        0
          HugePages_Surp:        0
          Hugepagesize:       2048 kB      2048 kB
          DirectMap4k:       10240 kB      10240 kB
          DirectMap2M:    33544192 kB      33544192 kB
    3、在网络上找原因
          自己分析不出问题点,网络上有很多人说slab来分配内存,但是我想知道slab中内存包括那些内容,很少的知识点,怎么办?
    我找到一个工具,linux-fincore
          下载linux-fincore工具:
                #wget https://codeload.github.com/waleedmazhar/linux-ftools/zip/master
          安装步骤如下:
                #cd /opt
                #unzip -d linux-ftools-master.zip
                #cd linux-ftools-master
                #./configure --prefix=/usr/local/linux-ftools      #请确保安装gcc依赖包,无错误进行下一步
                #make 
                #make install
          添加环境变量:
                #mv /usr/local/ftools/bin/* /usr/local/bin/       
    
    添加命令使用 `# linux-fincore --pages=false --summarize --only-cached * filename size total_pages min_cached page cached_pages cached_size cached_perc -------- ---- ----------- --------------- ------------ ----------- ----------- Could not mmap file: linux-ftools-master: No such device netapp.txt 891,161 218 0 218 892,928 100.00 --- total cached size: 892,928 `
     
    为了更好抓取内存中进程,我这边添加个脚本+定时任务来完成,提供开发需要的资料,
    脚本为:
    # cat fincore.sh
    #!/bin/bash
    . /etc/init.d/functions
    PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_131/bin:/usr/java/jdk1.8.0_131/lib:/root/bin
    echo $PATH
    if [ ! -f /usr/local/bin/linux-fincore ];then
      echo "you haven't install linux-fincore."
      exit 1
    fi
    ps -e -o pid,rss|sort -rnk 2  | head -10 | awk '{print $1}' > /tmp/cache.pid
    if [ -f /tmp/cache.log ];then
       echo "the cache.files is exist,removing now"
       rm -f /tmp/cache.log
    fi
    while read line
    do
      lsof -p $line 2>/dev/null  | awk '{print $9}' >>/tmp/cache.log
    done > /tmp/cache.fincore
       fi
    done
    linux-fincore -s `cat /tmp/cache.fincore`
    rm -f /tmp/cache.{pid,log,fincore}
    测试一下脚本使用
    #/bin/bash fincore.sh > 2.log
    #查看日志中分析的数据
    /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_131/bin:/usr/java/jdk1.8.0_131/lib:/root/bin
    filename                                                                                       size        total_pages    min_cached page       cached_pages        cached_size        cached_perc
    --------                                                                                       ----        -----------    ---------------       ------------        -----------        -----------
    /weaver/jdk1.8.0_131/bin/java                                                                 7,734                  2                  0                  1              4,096              50.00
    /lib64/libuuid.so.1.3.0                                                                      18,936                  5                  0                  5             20,480             100.00
    /usr/lib64/libstdc++.so.6.0.13                                                              989,840                242                  0                109            446,464              45.04
    /usr/lib64/libsapjco3.so                                                                  5,407,699              1,321                  0                500          2,048,000              37.85
    /weaver/ecology/WEB-INF/lib/ehcache-2.8.3.jar                                             5,637,564              1,377                  0                454          1,859,584              32.97
    这边我只保留部分数据,
    这时,脚本已启作用了,现在只需要添加定时任务让它自动运行并输出日志给到系统了,方便他们及时查看。
    
  • 相关阅读:
    Yii2 的 updateAll 方法参数详解
    Yii2 数据库查询汇总
    Git常见报错
    git rebase篇
    在 Yii 2.0 上,使用 updateAll() 更新表列值为同一表的另一列值的实现
    Git从其他分支merge个别文件
    Git cherry-pick 复制多个commit
    Git 删除某次提交(某个commit)的方法
    多进程记录
    python3安装Crypto过程
  • 原文地址:https://www.cnblogs.com/wang50902/p/14310634.html
Copyright © 2011-2022 走看看