【问题标题】:Finding total Sum of memory utilization in Windows using NEt:SNMP使用 NEt:SNMP 在 Windows 中查找内存利用率的总和
【发布时间】:2026-02-16 11:25:02
【问题描述】:

好吧,我已经为进程挖掘了各个 OID,并且我能够获取每个 OID 的内存使用情况,但问题是我如何获取整个进程使用情况。 问题是单个进程使用的 OID 是 1.3.6.1.2.1.25.5.1.1.2.X
现在 X 可以是任何数字,用于识别过程并增加难度, 它不按顺序。例如, 我可以按以下顺序获得 OID

1.3.6.1.2.1.25.5.1.1.1.1 = 整数:971526993 1.3.6.1.2.1.25.5.1.1.1.4 = 整数:3562884 1.3.6.1.2.1.25.5.1.1.1.296 = 整数:496 1.3.6.1.2.1.25.5.1.1.1.340 = 整数:12804 1.3.6.1.2.1.25.5.1.1.1.344 = 整数:68178 1.3.6.1.2.1.25.5.1.1.1.348 = 整数:40 1.3.6.1.2.1.25.5.1.1.1.372 = 整数:3535 1.3.6.1.2.1.25.5.1.1.1.424 = 整数:3985009 1.3.6.1.2.1.25.5.1.1.1.436 = 整数:27875212 1.3.6.1.2.1.25.5.1.1.1.440 = 整数:72218 1.3.6.1.2.1.25.5.1.1.1.592 = 整数:4820



等等。 . .

目前我的 perl 脚本是这样的:

      my ($session, $error) = Net::SNMP->session(
           -hostname  => shift || 'hostname',
              -community => shift || 'public',
      );

      if (!defined $session) {
                 printf "ERROR: %s.\n", $error;
                    exit 1;
            }
      //$OId_number will hold the OId of the particular process       
      my $result = $session->get_request(-varbindlist => [ $OID_number ],);

      if (!defined $result) {
                       printf "ERROR: %s.\n", $session->error();
                          $session->close();
                             exit 1;
       }

       printf "The Memory allocated  for process is  '%s' is %s.\n",
       $session->hostname(), $result->{$OID_number};
       $session->close();
       exit 0;

【问题讨论】:

  • 问题是我如何获得用于给定系统的完整内存。如您所见,X 的范围(OID 中的最后一个数字)的范围为 1 - 7500。如果我继续迭代然后检查真正的 OID,大约需要 20 分钟才能获得总内存利用率。我不能浪费这么多时间:(,有没有更快的方法来做到这一点?

标签: windows perl snmp net-snmp


【解决方案1】:

使用Net::SNMP's get_bulk_request 怎么样?您应该一次获得所有数据。

【讨论】: