高交换内存利用率

Vis*_*hal 1 java solaris java-ee

服务器配置:

  1. 物理拉姆 - 16Gb
  2. 交换内存 - 27Gb
  3. 操作系统 - Solaris 10
  4. 物理内存免费 - 598 Mb
  5. 使用交换内存 - ~26Gb
  6. Java版本 - Java HotSpot(TM)服务器VM - 1.6.0_17-b04

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

  1. 停止所有java应用程序并等到物理内存充分释放.然后执行命令"swapoff -a"(然后找出相当于此命令的Solaris)...等待直到使用的交换内存减少到零.然后执行命令"swapon -a"
  2. 增加物理内存

我需要以下几点的帮助: -

  1. 什么是solaris相当于swapoff和swapon?
  2. 选项1是否可以清除已使用的交换?

太感谢了!!!

Wil*_*ung 7

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

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

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

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

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

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

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