KMA 允许内核子系统根据需要分配和释放内存。
KMA 并不是静态分配在峰值载荷下预计所需的最大内存量,而是将内存请求划分为三个类别:
小型(少于 256 字节)
大型(512 字节至 4 千字节)
超大型(大于 4 千字节)
KMA 保留两个内存池,以满足小型和大型请求。超大型请求则通过从系统页面分配器中分配内存来满足。
如果您所检查的系统用来编写使用 KMA 资源的驱动程序或 STREAMS,则 sar -k 命令可能很有用。否则,您可能不需要它所提供的信息。使用 KMA 资源但不一定在退出前返回资源的所有驱动程序或模块都可能产生内存泄漏。内存泄漏会导致 KMA 分配的内存量随事件而增加。因此,如果 sar -k 命令的 alloc 字段随时间稳定增加,则可能存在内存泄漏。表明存在内存泄漏的另一种情况是请求失败。如果出现此问题,内存泄漏很可能导致 KMA 无法保留和分配内存。
如果似乎存在内存泄漏,则应检查可能从 KMA 请求内存但未返回内存的所有驱动程序或 STREAMS。