Solaris 应用程序使用 malloc()、brk() 或 mmap() 等函数分配内存。应用程序可分配的最大内存量受用户虚拟地址空间大小的限制。用户虚拟地址空间中包含的程序文本、堆栈、数据和库会进一步减小最大内存分配大小。
在 32 位计算环境中,用户与内核共享 32 位虚拟地址空间。因此,用户虚拟地址空间的大小为 4 GB 减去内核虚拟地址空间的大小。内核虚拟地址空间大小的配置取决于物理内存的大小。随着物理内存大小的增加,用户地址空间的大小会减小。对于具有 8 GB 内存的系统,用户地址空间的大小约为 3 GB。
如果内存分配限制对于应用程序不足,则存在两种选择:
减小内核虚拟地址空间的缺省大小,以增加用户虚拟地址空间的大小。可以使用 eeprom 命令将 kernelbase 变量设置为更高值。更改 kernelbase 会发出警告。否则,具有较小内核虚拟地址空间的系统可能挂起或无法有效运行。
作为更佳选择,请在 Solaris x86 64 位计算环境中运行应用程序。
在 64 位计算环境中,32 位应用程序的虚拟地址空间完全用于用户。所以,32 位应用程序可分配的内存为全部 4 GB 减去文本、堆栈和库所需的用户地址空间。
在某些早期 64 位 AMD 处理器上,可以进一步将内存分配限制减少 1 GB。要确定您的处理器是否受影响,请执行以下步骤:
从任何 32 位 shell 运行命令 pmap $$。
在处理器图上,检查是否已列出大于或等于 0xC0000000 的地址。如果这些地址不存在,则 Solaris OS 已将 32 位应用程序限制为最少为 4 GB 虚拟地址范围的 3 GB。
取决于应用程序已在使用的内存,64 位应用程序可分配 250 TB 内存。