【问题标题】:Java-based monitoring application基于 Java 的监控应用程序
【发布时间】:2010-10-15 22:51:37
【问题描述】:

想象下一个架构:

  1. 我们有基于 Spring 框架的 Java 应用程序(我们称之为 Manager)。
  2. 它接受请求并可以启动其他应用程序来处理它们(我们称它们为容器)。这些容器存在很长时间。它们的结构相当复杂,由几个不同的应用程序组成,但它们有控制部分,用 C++ 和 bash 脚本编写。 8 个 CPU 内核上的预期数量约为 2000。
  3. 我们有监控 Heartbeat 应用程序(还有 Java over Spring)。数据应该以某种方式从这些容器(关于 CPU、内存、带宽使用、版本)以及管理器和聚合中获取。 Heartbeat 会定期将聚合数据发送到更远的地方。

您对实施这样的事情有什么建议?请根据您的经验提供一些解决类似问题的框架或开源的要点或一些一般注意事项。

[更新]

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

【问题讨论】:

    标签: java frameworks statistics monitoring


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      因此,在考虑可管理性之前,我会首先考虑此架构并在多台机器和虚拟机之间扩展此架构。

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

      【讨论】:

      • 我用一些额外的信息更新了问题。内存消耗也困扰着我,但与此同时,我们没有用于检查的目标硬件。感谢您的回答!
      • 轮询 InputStream.available 而不是线程应该是安全的,这可能会以响应性换取内存消耗。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2013-08-26
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多