2012-02-15 133 views
1

服务器配置:高交换内存利用率

  1. 物理内存 - 16GB的
  2. 交换内存 - 27GB
  3. OS - 的Solaris 10
  4. 物理内存免费 - 598 MB
  5. 使用交换内存 - 〜26Gb
  6. Java版本 - Java的热点(TM)服务器VM - 1.6.0_17-B04

我的任务是减少使用的交换内存: - 解决方案,我有虽然的

  1. 停止所有java应用程序,等待物理内存被释放。然后执行 执行命令“swapoff -a”(但是要找出与此命令相当的Solaris)......等待交换内存使用率降为零。然后执行命令 “swapon命令-a”
  2. 增加物理内存

我需要以下几点帮助: -

  1. 请告诉我的Solaris等效的swapoff同时swapon的?
  2. 选项1是否可以清除已使用的交换?

非常感谢!

回答

7

首先,Java和交换不混合。如果你的Java应用程序正在交换,你注定会失败。很少有东西谋杀一台机器,如交换的Java进程。 GC和交换只是一场噩梦。

因此,如果你的机器与java进程交换 - 那台机器太小了。获得更多内存,或者减少机器上的负载(如果可能的话,包括java进程的堆)。

事实上,您的机器没有物理内存(600GB Mb),没有可用交换空间(1ish Gb)是机器过载的另一个指标。

当资源枯竭时,所有的事情都可能导致Java进程错误。

杀死Java进程将“失去交换”,因为进程不存在,所以不能交换。所有其他流程也是如此。 “交换内存”可能不会立即停止,但如果进程不存在 - 它不能交换(禁止使用不幸被换出的持久共享内存缓冲区,而Java通常不使用那些)。

我知道告诉操作系统将特定程序锁定到物理RAM并防止它被分页出去的方法并不是一个好方法。坦率地说,你不想。无论采取什么样的RAM,都需要认真考虑减少其占用空间,或者将Java进程从本机移出。你只是跑到了极限,而且这块石头上再也没有血迹了。

+0

另外一个指标是**页面扫描速率**来自vmstat输出......它在我们的系统中太高!! ..... GC也花费很长时间垃圾收集时间1分钟!!! – Vishal 2012-02-16 07:03:24

0

对我而言,不太清楚你在问什么 - 停止占用内存的应用程序应该占用内存(以及潜在的交换空间)。从您的描述中不清楚Java是否将您的盒子上的所有内存 - 通常没有理由运行JVM分配更多内存,即物理内存。检查如何启动JVM以及分配多少内存。

这里是如何在Solaris上管理交换:

http://www.aspdeveloper.net/tiki-index.php?page=SolarisSwap

+0

停止java进程清除的物理内存肯定可能不会交换!!! .......我想清除swap进程占用的java进程...操作系统试图把交换数据放到物理内存中( GC).......因为没有足够的物理内存...... java进程退出......可能会出现一些错误......并且java进程的交换数据仍然永远保存在交换中! – Vishal 2012-02-15 14:55:13