什么系统pipe理员技能和工具运行java应用程序的服务器?

两个问题:

首先,你需要什么“java技能”来pipe理服务器 – 运行 – java-apps? 例如:采取堆栈跟踪,采取堆转储,监视jvm等

其次,这样的系统pipe理员find什么工具是有帮助的。 (例如,一个应用程序来获取所有正在运行的jvm的堆栈跟踪可能会有所帮助)。

[编辑:在Windows上,至less,它有时很难找出哪个java.exe是哪个。 因此,“所有jvms”的堆栈跟踪将简化系统pipe理员的任务,而不是将其查找。 ]

我们的系统pipe理员有Windows背景。 我们想缩小开发人员和pipe理员之间的差距,所以系统pipe理员可以作为Java应用程序挂起/使用资源等的第一道防线。

什么适合你?

我会说一个JVMpipe理员需要知道如何至less:

  1. 能够安装任何给定(子)版本的运行时,启动JVM与推荐的参数,
  2. 调整运行时参数和指令以进行必要的应用程序日志logging(即启用GC日志logging)
  3. 了解单个操作系统实例上多个运行时的文件系统级安全性。
  4. 工作负载pipe理(CP关联,JVM人体工程学)
  5. 虚拟networking接口,
  6. 根据系统利用率规范化进程利用率。
  7. 启用/禁用分析
  8. jstat / jmap&c

其他人已经提到知道如何生成堆转储。

几个有用的工具:

通过线程转储(杀死Linux系统上的-HUP …不知道Windows上的等价机制是什么)可以为您提供应用程序状态的快照 – 类似于海森堡的不确定性原理(没有真正的:-)),它会告诉你现在的系统状态,但不会告诉你将要做什么或刚刚完成的工作。

线程转储是好的,因为它们只是将输出打印到应用程序的STDERR(或适当的日志),并且不会导致它locking。

使用堆转储对于了解应用程序中的数据状态非常有用 – 您可以使用诸如jmap(部分JDK / JRE分发版)之类的工具来进行堆转储。 但是这个关键问题是,为了进行堆转储,需要暂停JVM。 这导致应用程序基本locking到最终用户。 所以你可能不想这样做,除非事情真的搞砸了。

第三,您可以使用Java Management Extensions来监视应用程序的CPU,内存,线程和类的内部运行状态。 这也可以允许Java应用程序的开发者公开有关应用程序的内部统计信息,这些统计信息也可以被监视,例如使用Nagios的check_jmx工具。

最后,你显然有标准的系统工具,你可以得到监控CPU,磁盘I / O,内存利用等,这些都可以让你深入了解系统的整体健康状况,以及它是否在一个“好”的状态与否。

我认为其他的答案涵盖了大部分的基础,但是就具体的技能和工具而言,使用这些基础是一个出发点。

VisualVM的
为了立即检查正在运行的线程,并从所有可用的线程中selectJava进程, java.net VisualVM工具非常出色。

对于正在运行的Java线程和进程,本地和远程都有一个直观的树视图(如果对应用程序启用远程debugging)

你可以用它来保存正在运行的进程的快照,然后你可以在闲暇时进行分析。

在这里输入图像说明

你可以检查你的线程是什么状态,或者看一个configuration文件,看看你的应用程序花费了多less时间;

在这里输入图像说明

另外还有一些针对特定集成的插件 ,还有一个eclipse插件。

查看一些更酷的屏幕截图 – http://visualvm.java.net/

了解类加载器

我觉得在早期,我没有努力去理解JVM是如何工作的,特别是类加载器和容器生命周期。 而generics和参数化类的许多奇怪的东西使得更多的意义,如果你是什么策略的JVM使用。