11
2024
07
16:44:59

使用systemctl和top命令查询服务占用内存不同

使用systemctl和systemd-cgtop命令查询glusterd服务占用内存超31.0G,而使用top命令查询glusterd服务占用内存仅512M左右。


# systemctl status  glusterd

● glusterd.service - GlusterFS, a clustered file-system server

   Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)

   Active: active (running) since Tue 2020-06-30 10:12:05 CST; 3 weeks 1 days ago

     Docs: man:glusterd(8)

 Main PID: 9839 (glusterd)

    Tasks: 93 (limit: 7372)

   Memory: 31.0G

      CPU: 1w 1d 18h 51min 12.994s

   CGroup: /system.slice/glusterd.service

           ├─1890 /usr/sbin/glusterfsd -s node3 --volfile-id bcache2.node3.data2-data -p /var/run/gluster/vols/bcache2/node3-data2-data.pid -S /var/run/gluste

           ├─1938 /usr/sbin/glusterfsd -s node3 --volfile-id disk.node3.data-data -p /var/run/gluster/vols/disk/node3-data-data.pid -S /var/run/gluster/794789

           ├─9839 /usr/sbin/glusterd -p /run/glusterd.pid --log-level INFO

           └─9877 /usr/sbin/glusterfs -s localhost --volfile-id gluster/glustershd -p /var/run/gluster/glustershd/glustershd.pid -l /var/log/glusterfs/gluster


Jun 30 10:12:03 node3 systemd[1]: Starting GlusterFS, a clustered file-system server...

Jun 30 10:12:05 node3 systemd[1]: Started GlusterFS, a clustered file-system server.


582c79b19de50edd8cf382162acb2843_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d5bGZlbmd5dWppYW5jaGVuZw==,size_16,color_FFFFFF,t_70.png


原因分析:


systemd管理的服务(包括systemctl和systemd-cgtop)中显示的内存通过查询CGroup对应的memory.usage_in_bytes得到。top是直接统计/proc下内存相关信息计算得出。两者的统计方法不同,不能直接比较。


一般来说,业务进程使用的内存主要有以下几种情况:


anon_rss:用户空间的匿名映射页(Anonymous pages in User Mode address spaces),比如调用malloc分配的内存,以及使用MAP_ANONYMOUS的mmap。当系统内存不够时,内核可以将这部分内存交换出去。

file_rss:用户空间的文件映射页(Mapped pages in User Mode address spaces),包含map file和map tmpfs,前者比如指定文件的mmap,后者比如IPC共享内存。当系统内存不够时,内核可以回收这些页,但回收之前可能需要与文件同步数据。

file_cache:文件缓存(page in page cache of disk file),普通读写(read/write)文件时产生的文件缓存。当系统内存不够时,内核可以回收这些页,但回收之前可能需要与文件同步数据。

buffer pages:属于page cache,比如读取块设备文件时的相关缓存。

其中anon_rss和file_rss属于进程的RSS,file_cache和buffer pages属于page cache。简单来说:


top里的RSS = anon_rss + file_rss,SHR = file_rss。

CGroup里的memory.usage_in_bytes = cache + RSS + swap。

由上可知,syestemd相关命令和top命令的内存占用率含义不同,所以查询结果不同。





推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://www.hqyman.cn/post/7035.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: