高交换内存利用率

时间:2012-02-15 09:55:15

标签: java java-ee solaris

服务器配置:

  1. 物理拉姆 - 16Gb
  2. 交换内存 - 27Gb
  3. OS - Solaris 10
  4. 无物理记忆 - 598 Mb
  5. 使用的交换内存 - ~26Gb
  6. Java版本 - Java HotSpot(TM)服务器VM - 1.6.0_17-b04
  7. 我的任务是减少使用的交换内存: - 我有的解决方案

    1. 停止所有Java应用程序并等到物理内存充分释放。然后 执行命令“swapoff -a”(但要查找与此命令相当的Solaris)...等待直到使用的交换内存减少到零。然后执行命令“swapon -a”
    2. 增加物理内存
    3. 我需要以下几点的帮助: -

      1. solaris相当于swapoff和swapon?
      2. 选项1是否可以清除已使用的交换?
      3. 万分感谢!!!

3 个答案:

答案 0 :(得分:7)

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

所以,鉴于此,如果您使用java进程进行机器交换 - 该机器太小了。获取更多内存,或减少机器上的负载(如果可能,包括java进程的堆)。

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

当资源耗尽时,各种各样的事情可能会破坏你的Java进程。

杀死Java进程将“从交换中取出”,因为该进程不存在,所以不能进行交换。所有其他流程也是如此。 “交换内存”可能不会立即关闭,但如果一个进程不存在 - 它无法交换(禁止使用持久的共享内存缓冲区,这些缓冲区不幸被换出,Java通常不会使用那些。)

我知道告诉操作系统将特定程序锁定到物理RAM并阻止其被分页,这并不是一个好方法。而且,坦率地说,你不想这样做。

无论占用所有RAM,您都需要认真考虑减少其占用空间,或者将Java流程从这台机器上移开。你只是在艰难的极限中奔跑,而且这块石头上没有血了。

答案 1 :(得分:0)

我不太清楚你在问什么 - 停止占用内存的应用程序应该释放内存(并且潜在地交换空间)。从你的描述中不清楚Java是否占用了你的盒子上的所有内存 - 通常没有理由让JVM在盒子上分配更多内存和物理内存。检查如何启动JVM以及分配多少内存。

以下是如何在Solaris上管理交换:

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

答案 2 :(得分:0)

晚了一点,但是对于Solaris:

列出交换空间的详细信息:

make

列出交换片。例如:

swap -l

等同于交换:

swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 136,1 16 1206736 1084736
/export/data/swapfile -16 40944 40944

例如:

swap -d <file or device>

等价于货币:

swap -d /dev/dsk/c1t0d0s3

例如:

swap -a <file or device>

注意:您可能必须先创建设备,然后才能通过编辑/ etc / vfstab文件并添加描述交换片的信息来使用-a开关。例如:

swap -a /dev/dsk/c1t0d0s3