2024年11月Linux内存耗尽原因分析(2)

发布时间:

  ⑴.使用slabtop命令查看内核slab 缓冲区信息#slabtop -s c | head

  ⑵Active / Total Objects (% used : / (.%

  ⑶Active / Total Slabs (% used : / (.%

  ⑷Active / Total Caches (% used : / (.%

  ⑸Active / Total Size (% used : .K / .K (.%

  ⑹Minimum / Average / Maximum Object : .K / .K / .K

  ⑺OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME

  ⑻ % .K

  ⑼xfs_inode

  ⑽ % .K

  ⑾xfs_ili 占用k xfs_inode占用K,但他们究竟是什么东东?猜测是nas/rbd 卷的文件系统缓存信息。xfs_inode看字面意思是xfs文件系统的inode信息。

  ⑿搜了下xfs_ili,只搜到内核代码片段。xfs_inode_zone =

  ⒀ kmem_zone_init_flags(sizeof(xfs_inode_t, “xfs_inode”,

  ⒁ KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | KM_ZONE_SPREAD,

  ⒂ xfs_fs_inode_init_once;

  ⒃ if (!xfs_inode_zone

  ⒄ goto out_destroy_efi_zone;

  ⒅ xfs_ili_zone =

  ⒆ kmem_zone_init_flags(sizeof(xfs_inode_log_item_t, “xfs_ili”,

  ⒇ KM_ZONE_SPREAD, NULL;

  ⒈ typedef struct xfs_inode_log_item {

  ⒉ xfs_log_item_t ili_item; /* mon portion */

  ⒊ struct xfs_inode *ili_inode; /* inode ptr */

  ⒋ xfs_lsn_t ili_flush_lsn; /* lsn at last flush */

  ⒌ xfs_lsn_t ili_last_lsn; /* lsn at last transaction */

  ⒍ unsigned short ili_lock_flags; /* lock flags */

  ⒎ unsigned short ili_logged; /* flushed logged data */

  ⒏ unsigned int ili_last_fields; /* fields when flushed */

  ⒐ unsigned int ili_fields; /* fields to be logged */

  ⒑ struct xfs_bmbt_rec *ili_extents_buf; /* array of logged

  ⒒ data exts */

  ⒓ struct xfs_bmbt_rec *ili_aextents_buf; /* array of logged

  ⒔ attr exts */

  ⒕ xfs_inode_log_format_t ili_format; /* logged structure */

  ⒖ } xfs_inode_log_item_t;

  ⒗分析加估计是文件系统的日志缓存。究竟是不是?目前nfs-server有个卷,每个卷的在格式化xfs的时指定的参数(即日志大小-l=m ** 约等于。

  ⒘.但是xfs_ili xfs_inode两者加起来才G,还有G去哪儿了呢?查资料说linux将用过的文件缓存到内存中。

  ⒙执行下面的命令就释放了内存#sync #

  ⒚#echo 》 /proc/sys/vm/drop_caches

  ⒛是不是由于内存少导致的性能变差,还在测试。不过以后在优化nfs-server端有一定的指导意义。卷越多,必然占用的内存越多。做机头的内存配置要高。

  ①以上就是Linux内存耗尽原因分析的全部内容了,只有找到内存占用高的原因,才能解决和防止类似情况发生。