Solaris 可调参数参考手册

内核内存分配器

Solaris 内核内存分配器可在内核内部分配内存块以供客户机使用。此分配器可创建许多大小不同的高速缓存以供其客户机使用。客户机也可以请求分配器创建专供该客户机使用的高速缓存(例如,用于分配特定大小的结构)。可以使用 kstat -c kmem_cache 命令来查看有关由此分配器管理的每个高速缓存的统计信息。

有时,系统可能会因内存损坏而发生混乱。内核内存分配器支持调试接口(一组标志,可对缓冲区执行各种完整性检查)。它还可收集有关分配器的信息。通过完整性检查可以比较精确地检测实际出现错误的位置。收集的信息可以为您确定系统混乱的原因提供更多的数据支持。

在系统运行期间使用标志会引起额外的系统开销并占用更多的内存。仅当怀疑出现内存损坏问题时,才应使用这些标志。

kmem_flags

说明

Solaris 内核内存分配器具有各种调试和测试选项,这些选项可在 Solaris OS 内部开发周期内广泛使用。从 Solaris 2.5 发行版开始,便可使用这些选项中的部分选项。这些选项受 kmem_flags 变量控制。可使用内核调试程序设置该变量,然后重新引导系统使其生效。Solaris 8 发行版之前的版本,由于在内核内存分配器实例化的计时以及 /etc/system 文件解析方面存在问题,因此无法在 /etc/system 文件中设置这些标志。

以下介绍了五种受支持的标志设置。

标志 

设置 

说明 

AUDIT

0x1

分配器维护包含其最近活动历史记录的日志。记录的项数取决于是否还设置了 CONTENTS。此日志大小固定。当用完空间时,便会回收较早的记录。

TEST

0x2

分配器向释放的内存中写入模式,并在下一次分配缓冲区时检查此模式是否未更改。如果缓冲区的某部分发生更改,则内存可能由先前已分配和释放此缓冲区的客户机使用。如果确定出现覆写,则系统会发生混乱。 

REDZONE

0x4

分配器在请求的缓冲区的结尾提供额外内存,并将特定模式插入此内存。释放缓冲区时,将检查此模式以查看是否在缓冲区结尾后面写入数据。如果确定出现覆写,则内核会发生混乱。 

CONTENTS

0x8

释放缓冲区时,分配器最多记录 256 个字节的缓冲区内容。此标志要求还应设置 AUDIT

从 Solaris 8 发行版开始或者在早期发行版中,通过在启动内核之前引导 kadb 并设置这些标志,/etc/system 文件可以对这些标志的数值进行逻辑相加和设置。

LITE

0x100

分配和释放缓冲区后,执行最小完整性检查。启用时,分配器将检查是否尚未写入 redzone,是否再次释放已释放的缓冲区,以及要释放的缓冲区的大小是否为已分配的大小。从 Solaris 7 3/99 发行版开始,便提供了此标志。请不要将此标志与任何其他标志一起使用。 

数据类型

带符号整数

缺省值

0(禁用)

范围

0(禁用)或 1 - 15 或 256 (0x100)

是否为动态

是。运行时进行的更改仅影响新的内核内存高速缓存。初始化系统之后,很少创建新的高速缓存。

验证

何时更改

怀疑发生内存损坏时

承诺级别

不稳定