1.1 sigar

Sigar(system information gather and report)是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件。它用来从许多平台收集系统和处理信息。这些平台包括:Linux, Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX。

Sigar有C,C#,Java和Perl API,java版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。



1.2 PTQL

1.2.1 PTQL语法

Hyperic SIGAR 提供一种定位进程的机制,叫做进程表查询语言-PTQL(process table query language)。所有的操作系统都会给运行的进程分配一个PID,但是这个进程号是一个随机数字,当你每次启动某个程序的时候,这个进程号是随机可变的。所以我们不能用进程号来定位程序, PTQL 使用的是进程的属性值来定位程序,这些属性值是一直不变的。




sigar> ps "Exe.Name.ct=Program Files"
  • Class is the name is the sigar class minus the Proc prefix.
  • Attribute is an attribute of the given Class, index into an array or ker in a Map class.
  • operate in one of the folling for String values.
    • eq: Equal to values.
    • ne: Not Equal to value.
    • gt: Greater thab value.
    • ge: Great than or equal value.
    • lt: Less than value.
    • le: Less than or equal value.
    • ew: End with value.
    • sw: Starts with value.
    • ct: Contains value(subsring).
    • re: Regular expression value matches.

Mutiole queries must delimited by a comma.多个查询之间以逗号分隔连接。

1.2.2 PTQL属性

The attributes used in PTQL are directly from the sigar.Proc* classes. This document will outline the attributes most commonly used for identifying process. the complete set of Proc* classes and attributes can be found in the Sigar javadoc.

  • Pid.Pid: the process ID.
  • Pid.PidFile: file containing the process id.
  • Pid.Service: windows services name used to pid from the service manager.
  • State.Name: base name of the process executable.
  • CredName.User: user name of the process owner.
  • CredName.Group: group name of the process owner.
  • Cred.Uid: user id of the process owner.
  • Cred.Gid: group id of the process name.
  • Cred.Euid: effective user if of the process owner.
  • Cred.Egid: effective group id of the process owner.
  • full path name of the process executable.
  • Exe.Cwd: currnet working directory of the process.
  • Args.*: command line argument passed to the process.
  • Env.*: environment varibale within the process.
  • Module.*: shared library loaded within the process.

1.2.3 PTQL构建

The process of building a process query will vary depending on the application and the need to identify a unique peocess or group of processes. For these examples, we will use sigar shell. The sigar shell is started using the folling command.


# 目录结构
[root@localhost sigar]# ls  sigar.jar
# 启动命令
[root@localhost sigar]# java -jar sigar.jar 

The help command will show rhe complete list of top-level commands. We will focus on the handful that are useful for building PTQL queries:

  • ps: process status.
  • pargs: process arguments.
  • penv: process environment.
  • pfile: process file information.
  • pinfo: other process info.

Each of the commands listed above require an argument of rither a process id or PTQL query.** For certain commands like ps you can use tab completion in the shell to see the possilble values.**(按tab键补全)


2.1 Simple Process Identification

The simplest of queries can use 'State.Name', the basename of the process executable, to indetify a process. For example, the cron daemon on a linux system.

sigar> ps "State.Name.eq=crond"
15908   root    Sep6    123M    1.6M    964K    S   0:8 /usr/sbin/crond

This approach works to uniquely identify other daemons, such as 'syslogd', 'dhclient' and others where there should only be 1 process with the given name. However, in the case of a daemon such as sshd, there will likely be multiple instances:

sigar> ps "State.Name.eq=sshd" 
925 root    Aug22   104M    4.0M    3.1M    S   0:56    /usr/sbin/sshd
27275   root    Oct29   142M    5.1M    3.8M    S   0:0 sshd: root@pts/1

The easiest way to find the listening sshd server is to use the pid file:

sigar> ps "Pid.PidFile.eq=/var/run/"
925 root    Aug22   104M    4.0M    3.1M    S   0:56    /usr/sbin/sshd

2.2 Identifying a Unique Java Process

'State.Name' may be enough to identify certain processes, but this is almost never the case with java applications, where the executable basename is 'java' for all applications:

sigar> ps "State.Name.sw=java"              
1422    root    Sep21    21G    3.9G     16M    S   519:34  java:/opt/server/cynosure/cynosure-1.0.0-SNAPSHOT.jar
4251    root    09:35    11G     35M     12M    S   0:0 java:org.hyperic.sigar.cmd.Runner
25496   root    Sep11    11G    218M     12M    S   32:54   java:clojure.main
25683   root    Sep11    13G    407M     12M    S   46:30   java:clojure.main

To view the command line arguments for a specific process:

sigar> pargs 4251


For most java applications, the main class name can be used to uniquely identify the process, in this case argument 2 is the sigar main class name:

sigar> ps "State.Name.eq=java,Args.2.eq=sigar.jar" 
4251    root    09:35    11G     35M     12M    S   0:1 java:org.hyperic.sigar.cmd.Runner





Sigar 命令的查询方法PTQL语法