服务器配置:
我的任务是减少使用的交换内存: -
我有的解决方案
我需要以下几点的帮助: -
万分感谢!!!
答案 0 :(得分:7)
首先,Java和交换不混合。如果您的Java应用程序正在交换,那么您只是注定失败。很少有东西像交换过程一样谋杀机器。 GC和交换只是一场噩梦。
所以,鉴于此,如果您使用java进程进行机器交换 - 该机器太小了。获取更多内存,或减少机器上的负载(如果可能,包括java进程的堆)。
您的机器没有物理内存(600ish Mb),没有空闲交换空间(1ish Gb)这一事实是机器超载的另一个指标。
当资源耗尽时,各种各样的事情可能会破坏你的Java进程。
杀死Java进程将“从交换中取出”,因为该进程不存在,所以不能进行交换。所有其他流程也是如此。 “交换内存”可能不会立即关闭,但如果一个进程不存在 - 它无法交换(禁止使用持久的共享内存缓冲区,这些缓冲区不幸被换出,Java通常不会使用那些。)
我知道告诉操作系统将特定程序锁定到物理RAM并阻止其被分页,这并不是一个好方法。而且,坦率地说,你不想这样做。
无论占用所有RAM,您都需要认真考虑减少其占用空间,或者将Java流程从这台机器上移开。你只是在艰难的极限中奔跑,而且这块石头上没有血了。
答案 1 :(得分:0)
我不太清楚你在问什么 - 停止占用内存的应用程序应该释放内存(并且潜在地交换空间)。从你的描述中不清楚Java是否占用了你的盒子上的所有内存 - 通常没有理由让JVM在盒子上分配更多内存和物理内存。检查如何启动JVM以及分配多少内存。
以下是如何在Solaris上管理交换:
答案 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