【问题标题】:high swap memory utilization高交换内存利用率
【发布时间】:2012-03-06 15:57:26
【问题描述】:

服务器配置:

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

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

  1. 停止所有 Java 应用程序并等待物理内存充分释放。然后 执行命令“swapoff -a”(尚未找到与此命令等效的 Solaris)...等到使用的交换内存降为零。然后执行命令“swapon -a”
  2. 增加物理内存

我需要以下几点帮助:-

  1. solaris 中的 swapoff 和 swapon 等价物是什么?
  2. 选项 1 是否可以清除已使用的交换?

谢谢一百万!!!

【问题讨论】:

    标签: java jakarta-ee solaris


    【解决方案1】:

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

    这是在 Solaris 上管理交换的方法:

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

    【讨论】:

    • 停止java进程肯定会清除物理内存,但可能不会swap!!!.......我想清除java进程占用的swap内存......操作系统试图把swap数据到物理内存(GC)......因为没有足够的物理内存......java进程退出......可能有一些错误......并且java进程的交换数据仍然在交换中永远!!
    【解决方案2】:

    首先,Java 和 swap 不能混用。如果您的 Java 应用程序正在交换,那么您就注定要失败。很少有东西会像交换的 java 进程那样谋杀机器。 GC 和 swap 简直就是一场噩梦。

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

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

    当资源耗尽时,所有的事情都可能导致您的 Java 进程出错。

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

    据我所知,没有一种好的方法可以告诉操作系统将特定程序锁定到物理 RAM 中并防止它被分页。而且,坦率地说,你不想这样做。

    无论是什么占用了您的所有 RAM,您都需要认真考虑减少其占用空间,或者将 Java 进程移出这台机器。你只是跑到了严格的极限,这块石头里已经没有血了。

    【讨论】:

    • 另外一个指标是来自vmstat输出的页面扫描率......它在我们的系统中太高了!!......GC也需要很长时间垃圾收集时间有时 1 分钟!!!
    【解决方案3】:

    聚会有点晚了,但对于 Solaris:

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

    swap -l
    

    列出交换片。例如:

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

    swapoff 等价物:

    swap -d <file or device>
    

    例如:

    swap -d /dev/dsk/c1t0d0s3
    

    等价交换:

    swap -a <file or device>
    

    例如:

    swap -a /dev/dsk/c1t0d0s3
    

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

    /dev/dsk/c1t0d0s3 --swap -no -
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2014-07-30
      • 2016-05-13
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多