列举系统上的NUMA节点:
numactl --hardware
启动java锁定到节点0,在本地节点上分配所有内存:
numactl --cpubind=0 --localalloc java Hello
在本地节点上分配所有内存,避免通过NUMA总线的开销。非本地的内存访问将导致性能损失。所分配的内存大小取决于应用程序和硬件。常见的值可能是降低10%,但是也可能更高,所以如果需要调优性能,该设置无疑需要多次试验。更多信息请参见numactl man page。
对于JRockit用户的一些典型配置
- 在一个WLS集群中,每个NUMA节点运行一个WLS节点,以避免在访问内存和进行垃圾收集的过程中的所有NUMA开销。
- 对于具有低延迟要求的应用程序,在一个节点上运行JRockit以避免垃圾收集期间的NUMA开销,缩短暂停时间。
- 运行分布于多个NUMA节点上的一个进程,跨节点交叉访问内存。在单个线程在启动时初始化大量数据结构的应用程序中,这是一个不错的选择,因为它将内存跨多个节点分布,而不是从单个节点分配一切。最终结果不是最优的,但是要比将所有关键数据结构分布于单个节点要好。

f
jiayou