|
2006-07-14 00:00:00 | 评论 (0) | 被访问(639)次
|
大型系统可能被用于运行一个大的进程(分布于整台机器),但是更常见的配置是对该机器进行分区,并运行多个较小的进程,每个进程分布于一个专用的分区中。要在一个运行Linux并使用NUMA架构的服务器上实行分区,可以使用numactl命令启动JRockit。这允许用户控制在哪个NUMA节点上运行进程,以及从哪个节点分配内存。下面是一些示例命令:
列举系统上的NUMA节点: numactl --hardware 启动java锁定到节点0,在本地节点上分配所有内存: numactl --cpubind=0 --localalloc java Hello 在本地节点上分配所有内存,避免通过NUMA总线的开销。非本地的内存访问将导致性能损失。所分配的内存大小取决于应用程序和硬件。常见的值可能是降低10%,但是也可能更高,所以如果需要调优性能,该设置无疑需要多次试验。更多信息请参见numactl man page。 对于JRockit用户的一些典型配置
- 在一个WLS集群中,每个NUMA节点运行一个WLS节点,以避免在访问内存和进行垃圾收集的过程中的所有NUMA开销。
- 对于具有低延迟要求的应用程序,在一个节点上运行JRockit以避免垃圾收集期间的NUMA开销,缩短暂停时间。
- 运行分布于多个NUMA节点上的一个进程,跨节点交叉访问内存。在单个线程在启动时初始化大量数据结构的应用程序中,这是一个不错的选择,因为它将内存跨多个节点分布,而不是从单个节点分配一切。最终结果不是最优的,但是要比将所有关键数据结构分布于单个节点要好。
该调优技巧应用于Linux和任何使用NUMA架构的服务器,包括基于Itanium的大型服务器,比如SGI Altix和Bull NovaScale,以及大多数多套接字的基于AMD Opteron的服务器。
原文出处:http://dev2dev.bea.com/blog/hstahl/archive/2006/06/performance_tip_1.html
|
|