Java 进程 OldGen 占用

收集指定 Java 进程的 OldGen (老代堆)占用

插件文件地址
proc.java.cpu
插件类型
接受参数,重复执行

警告

如果你的 Java 进程是在容器内运行的,那么你必须在容器内进行收集。 插件是通过 jstat -gccause <pid> 命令收集的,这个命令需要读取 /tmp/hsperfdata_* 文件中的信息。

插件参数

参数 功能
cmdline 被监控进程的命令行正则表达式 [1]
name 这个监控的名字,用来区分其他的监控
[1]命令行是从 /proc/ pid /cmdline 读取并且将其中的 \x00 替换成空格后进行匹配。 匹配是任意位置的,需要限定从一开始匹配的话请在正则前面加上 ^

上报的监控值

proc.java.heap
意义:指定的 Java 进程的 OldGen 占用百分比
取值:0 - 100
Tags:{"pid": " 指定进程的 pid ", "name": " 指定的监控名字 "}

监控规则样例

(def infra-es-rules
  (sdo
    (where (host #"^es\d$")
      (plugin "proc.java.heap" 30
        {:name "elasticsearch", :cmdline "org.elasticsearch.bootstrap.Elasticsearch"})

      (where (and (service "proc.java.heap")
                  (= (:name event) "elasticsearch"))
        (by [:host :region]
          (judge-gapped (> 99.8) (< 95)
            (runs 3 :state
              (alarm-every 2 :min
                (! {:note "ElasticSearch OldGen 满了!"
                    :level 1
                    :expected true
                    :outstanding-tags [:host :name]
                    :groups [:operation :api]})))))))))