诊断Solaris 8服务器内存和交换空间使用情况

本质上,我的问题与Solaris虚拟机的内存分配有关。

我在两台Solaris 8虚拟机上运行了几个旧的Sun ONE 6 Java Web服务器。 我看到有一个合理数量的交换空间被使用,但我不确定这是否表示需要添加更多的RAM到这些机器。

在服务高峰时段(通常早上),这些服务器主机的Web应用程序的响应时间最多跳至11秒(对于相对简单的网页加载操作而言有些不利)。 非高峰时间的平均响应时间约为5秒。

你可以从下面的输出中推断出这些机器的RAM使用情况? 这个信息合理吗? 或者我需要运行一些其他命令来排除服务器内存不足?

最后,由于在安装过程中有一个Java应用程序,我也想过:

1)跟踪堆的对象分配来检测潜在的内存泄漏。

2)做一些性能分析,看看这是否涉及到networking延迟。 自从应用程序与单个Oracle数据库进行交涉之后,我提到了这一点,但是由于从networking分割的angular度来看它们非常接近,所以我会怀疑是这种情况。

我很感谢您提供的任何洞察和反馈。

感谢您的时间和帮助。

服务器1:

40 processes: 38 sleeping, 1 zombie, 1 on cpu CPU states: 99.1% idle, 0.4% user, 0.4% kernel, 0.0% iowait, 0.0% swap Memory: 2048M real, 295M free, 865M swap in use, 3788M swap free PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND 12676 webservd 112 29 10 616M 242M sleep 103:37 0.48% webservd 18317 root 1 59 0 23M 19M sleep 67:24 0.08% perl 9479 support 1 59 0 6696K 2448K cpu/1 0:11 0.05% top 8012 root 10 59 0 34M 704K sleep 80:54 0.04% java 1881 root 33 29 10 110M 13M sleep 33:03 0.02% webservd 7808 root 1 59 0 83M 67M sleep 7:59 0.00% perl 1461 root 20 59 0 5328K 1392K sleep 6:49 0.00% syslogd 1691 root 2 59 0 27M 680K sleep 4:22 0.00% webservd 24386 root 1 59 0 15M 11M sleep 2:50 0.00% perl 23259 root 1 59 0 11M 4240K sleep 2:42 0.00% perl 24718 root 1 59 0 11M 5464K sleep 2:29 0.00% perl 22810 root 1 59 0 19M 11M sleep 2:21 0.00% perl 24451 root 1 53 2 11M 3800K sleep 2:18 0.00% perl 18501 root 1 56 1 11M 3960K sleep 2:18 0.00% perl 14450 root 1 56 1 15M 6920K sleep 1:49 0.00% perl 

服务器2

  42 processes: 40 sleeping, 1 zombie, 1 on cpu CPU states: 98.8% idle, 0.4% user, 0.8% kernel, 0.0% iowait, 0.0% swap Memory: 1024M real, 31M free, 554M swap in use, 3696M swap free PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND 5607 webservd 74 29 10 284M 173M sleep 20:14 0.21% webservd 15919 support 1 59 0 4056K 2520K cpu/1 0:08 0.09% top 13138 root 10 59 0 34M 1952K sleep 210:51 0.08% java 13753 root 1 59 0 22M 12M sleep 170:15 0.07% perl 22979 root 33 29 10 112M 7864K sleep 85:07 0.04% webservd 22930 root 1 59 0 3424K 1552K sleep 17:47 0.01% xntpd 22978 root 2 59 0 27M 2296K sleep 10:49 0.00% webservd 13571 root 1 59 0 9400K 5112K sleep 5:52 0.00% perl 5606 root 2 29 10 29M 9056K sleep 0:36 0.00% webservd 15910 support 1 59 0 9128K 2616K sleep 0:00 0.00% sshd 13106 root 1 59 0 82M 3520K sleep 7:47 0.00% perl 13547 root 1 59 0 12M 5528K sleep 6:38 0.00% perl 13518 root 1 59 0 9336K 3792K sleep 6:24 0.00% perl 13399 root 1 56 1 8072K 3616K sleep 5:18 0.00% perl 13557 root 1 53 2 8248K 3624K sleep 5:12 0.00% perl 

要确定您的服务器是否缺lessRAM,vmstat命令输出中的sr列将是一个有用的指标。 在参考和高峰期间(每10秒10个样本)运行一下像vmstat 10 10类的东西,并输出结果。 swap -s产出也是有用的。 另外对于vmstat,你可能更喜欢运行sar -g 5 5在任何情况下,根据“top”输出,server2似乎都缺lessRAM。 Solaris有一个类似于top的受支持命令,可能也有助于识别虚拟和物理内存使用者:

 prstat -s rss -n 5 prstat -s size -n 5 

这些快照中突出的东西如下:

  • 很多perl进程
  • 多个webservd进程
  • 机器闲置98%和99%

这些事实导致以下问题…

  • 你能减lessperl进程的数量吗?
  • 我想没有办法切换到线程的Web服务器模型?
  • 当机器处于压力下时系统的顶部是什么样的?

最后,我会做下面的跟踪:

  • 使用像Wireshark这样的networking嗅探器来查看HTTP进程的哪个部分实际上被阻塞。 这是连接吗? 这是页面的交付? 这是页面dynamic部分的交付吗?
  • 获取HTTP压力工具,并强调您的Web服务器,看看他们如何反应。 用vmstat和top观察响应:我喜欢在terminal中使用屏幕来执行此操作。

祝你好运!

我总是发现跟踪内存使用情况的最简单的方法是系统会计。 它可以跳过很多,所以重要的是至less查看一个星期来查看使用模式。

编辑“sys”crontab,你会看到脚本/ usr / lib / sa / sa1的一些注释掉。 运行频率决定了保存的会计数据的时间分辨率。 我通常为24×7系统做这样的事情:

 20,40 * * * * /usr/lib/sa/sa1 

这将在月份的当天将统计信息存储在/ var / adm / sa中。 现在使用sar来转储存储在那里的任何日子的内存统计信息。 说第三天对我来说是一个高峰期:

 sar -f /var/adm/sa/sa03 -g 

主要兴趣的列是pgscan / s。 如果长时间超过200,那么系统内存不足。 在100岁时,你可能会从更多的记忆中受益,但是退化并不严重。 现在磁盘交换速度比内存慢得多,除了短期跳转,我尽量保持在0。