基于Java的监控应用程序

时间:2009-03-27 14:18:36

标签: java frameworks statistics monitoring

想象一下下一个架构:

  1. 我们在Spring框架上有Java应用程序(我们称之为Manager)。
  2. 它接受请求并可以启动其他应用程序来处理它们(让我们称之为容器)。这些容器存在很长时间。它们具有相当复杂的结构,由几个不同的应用程序组成,但它们具有用C ++和bash脚本编写的控制部分。 8个CPU内核的预期数量约为2000个。
  3. 我们监控Heartbeat应用程序(也是Spring over Spring)。数据应以某种方式从那些容器(在CPU,内存,带宽使用,版本上)以及从管理器和聚合中获取。 Heartbeat定期在某处进一步发送汇总数据。
  4. 您对实施此类事项有何建议?请提供一些框架或开放源代码的指出,以解决类似问题或根据您的经验进行一些一般性考虑。

    [更新]

    • 目标操作系统:Solaris
    • 提到的2000个进程是本机应用程序。每个都有自己的chroot,并以单独的用户身份登录。

2 个答案:

答案 0 :(得分:1)

我最初的想法不是管理/监控方面,而是使用Java管理器在您的一台计算机上启动2,000个不同的进程。这些消耗多少内存?它们同时运行吗?如果它们是不同的实现,则机器可以使用共享库等来减少内存消耗。

然后Java进程必须读取/处理进程stdout / stderr(通常你在每个流的一个线程中执行此操作,以防止阻塞 - 如果你有2,000个进程使用这个机制,那么你正在查看4000个线程)。

因此,在考虑可管理性之前,我最初会考虑这种架构,并在多台计算机和虚拟机上进行扩展。

要获取CPU /内存等,我会查看JMX和提供的bean。 JMX提供了通过RMI等公开这些数据的方法。但是为了获得每个子进程(用你的说法中的容器)的这些信息,将需要特定于操作系统的信息。你在用什么操作系统?对于Windows,请查看WMI。在Unix / Linux上,各种/proc文件系统节点可以为您提供帮助。

答案 1 :(得分:1)

也许你可以在Nagios页面上找到有用的东西(http://www.nagios.org/