您的位置:首页 > 编程语言 > Python开发

电脑信息监控模块:Sigar介绍(适用于JAVA、PYTHON、C#等)

2017-04-25 14:58 507 查看
原文地址:http://blog.csdn.net/yaerfeng/article/details/7018362

Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,由C语言实现的。可以收集的信息包括:

1, CPU信息,包括基本信息(vendor、model、mhz、cacheSize)和统计信息(user、sys、idle、nice、wait)

2, 文件系统信息,包括Filesystem、Size、Used、Avail、Use%、Type

3, 事件信息,类似Service Control Manager

4, 内存信息,物理内存和交换内存的总数、使用数、剩余数;RAM的大小

5, 网络信息,包括网络接口信息和网络路由信息

6, 进程信息,包括每个进程的内存、CPU占用数、状态、参数、句柄

7, IO信息,包括IO的状态,读写大小等

8, 服务状态信息

9, 系统信息,包括操作系统版本,系统资源限制情况,系统运行时间以及负载,Java的版本信息等.

Sigar在Java中的使用:

示例代码:

Java代码

[java] view
plain copy

print?

package cn.jsi.buaa;

import org.hyperic.sigar.Cpu;

import org.hyperic.sigar.CpuInfo;

import org.hyperic.sigar.CpuPerc;

import org.hyperic.sigar.Sigar;

import org.hyperic.sigar.SigarException;

import com.thoughtworks.xstream.XStream;

/**

* Cpu数据

*

* 使用Sigar获得CPU的基本信息、使用百分比、使用时间

*

*/

public class SigarTest {

private CpuInfo info;

private CpuPerc perc;

private Cpu timer;

public SigarTest() {

}

public void populate(Sigar sigar) throws SigarException {

info = sigar.getCpuInfoList()[0];

perc = sigar.getCpuPerc();

timer = sigar.getCpu();

}

public static SigarTest gather(Sigar sigar) throws SigarException {

SigarTest data = new SigarTest();

data.populate(sigar);

return data;

}

public static void main(String[] args) throws Exception {

System.out.println(System.getProperty("java.library.path"));

Sigar sigar = new Sigar();

SigarTest cpuData = SigarTest.gather(sigar);

XStream xstream = new XStream();

xstream.alias("CpuData", SigarTest.class);

System.out.println(xstream.toXML(cpuData));

}

}

Windows:将sigar.jar包放到classpath下,将sigar-amd64-winnt.dll放到环境变量java.library.path下。

Linux:将sigar.jar包放到classpath下,将libsigar-x86-linux.so放到环境变量java.library.path下。

获取网卡的流量

和网卡相关的统计数据主要有:网卡信息(ip地址、子网掩码、mac地址等)、网卡的吞吐量、流量等等。

当然了使用sigar也可以获得这些数据。

下面通过例子说明:

Java代码

Java代码


[java] view
plain copy

print?

1. package lab.sigar;

2.

3. import java.util.ArrayList;

4. import java.util.List;

5.

6. import org.hyperic.sigar.NetInterfaceConfig;

7. import org.hyperic.sigar.NetInterfaceStat;

8. import org.hyperic.sigar.Sigar;

9. import org.hyperic.sigar.SigarException;

10.

11. import com.thoughtworks.xstream.XStream;

12.

13. /**

14. * 网卡信息、接口数据、流量

15. *

16. * 使用Sigar获得网卡信息

17. *

18. */

19. public class NetInterfaceData {

20.

21. private NetInterfaceConfig config;

22. private NetInterfaceStat stat;

23. private long rxbps;

24. private long txbps;

25.

26. public NetInterfaceData() {}

27.

28. public void populate(Sigar sigar, String name)

29. throws SigarException {

30.

31. config = sigar.getNetInterfaceConfig(name);

32.

33. try {

34.

35. long start = System.currentTimeMillis();

36. NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);

37. long rxBytesStart = statStart.getRxBytes();

38. long txBytesStart = statStart.getTxBytes();

39. Thread.sleep(1000);

40. long end = System.currentTimeMillis();

41. NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);

42. long rxBytesEnd = statEnd.getRxBytes();

43. long txBytesEnd = statEnd.getTxBytes();

44.

45. rxbps = (rxBytesEnd - rxBytesStart)*8/(end-start)*1000;

46. txbps = (txBytesEnd - txBytesStart)*8/(end-start)*1000;

47. stat = sigar.getNetInterfaceStat(name);

48. } catch (SigarException e) {

49.

50. } catch (Exception e) {

51.

52. }

53. }

54.

55. public static NetInterfaceData gather(Sigar sigar, String name)

56. throws SigarException {

57.

58. NetInterfaceData data = new NetInterfaceData();

59. data.populate(sigar, name);

60. return data;

61. }

62.

63. public NetInterfaceConfig getConfig() {

64. return config;

65. }

66.

67. public NetInterfaceStat getStat() {

68. return stat;

69. }

70.

71.

72.

73. public long getRxbps() {

74. return rxbps;

75. }

76.

77. public long getTxbps() {

78. return txbps;

79. }

80.

81. public static void main(String[] args) throws Exception {

82. Sigar sigar = new Sigar();

83. String[] netIfs = sigar.getNetInterfaceList();

84. List netIfList = new ArrayList();

85. for ( String name:netIfs ) {

86. NetInterfaceData netIfData1 = NetInterfaceData.gather(sigar, name);

87. netIfList.add(netIfData1);

88. }

89. XStream xstream = new XStream();

90. xstream.alias("NetInterfaceDatas", List.class);

91. xstream.alias("NetInterfaceData", NetInterfaceData.class);

92. System.out.println(xstream.toXML(netIfList));

93. }

94. }

获取内存数据

内存的主要指标有:物理内存的大小、使用数、剩余数;交换内存的大小、使用数、剩余数;RAM的大小等等。

下面通过例子说明:

Java代码

Java代码

[java] view
plain copy

print?

1. package lab.sigar;

2.

3. import org.hyperic.sigar.Mem;

4. import org.hyperic.sigar.Sigar;

5. import org.hyperic.sigar.SigarException;

6. import org.hyperic.sigar.Swap;

7.

8. import com.thoughtworks.xstream.XStream;

9.

10. /**

11. * 内存数据

12. *

13. * 使用Sigar获得系统内存信息

14. *

15. */

16. public class MemoryData {

17. private Mem mem;

18. private Swap swap;

19.

20. public MemoryData() {

21. }

22.

23. public void populate(Sigar sigar) throws SigarException {

24. mem = sigar.getMem();

25. swap = sigar.getSwap();

26. }

27.

28. public static MemoryData gather(Sigar sigar) throws SigarException {

29. MemoryData data = new MemoryData();

30. data.populate(sigar);

31. return data;

32. }

33.

34. public static void main(String[] args) throws Exception {

35. Sigar sigar = new Sigar();

36. MemoryData memData = MemoryData.gather(sigar);

37. XStream xstream = new XStream();

38. xstream.alias("MemData", MemoryData.class);

39. System.out.println(xstream.toXML(memData));

40. }

41.

42. }





输出:

Xml代码

Xml代码


[java] view
plain copy

print?

1. package lab.sigar;

2.

3. import org.hyperic.sigar.Mem;

4. import org.hyperic.sigar.Sigar;

5. import org.hyperic.sigar.SigarException;

6. import org.hyperic.sigar.Swap;

7.

8. import com.thoughtworks.xstream.XStream;

9.

10. /**

11. * 内存数据

12. *

13. * 使用Sigar获得系统内存信息

14. *

15. */

16. public class MemoryData {

17. private Mem mem;

18. private Swap swap;

19.

20. public MemoryData() {

21. }

22.

23. public void populate(Sigar sigar) throws SigarException {

24. mem = sigar.getMem();

25. swap = sigar.getSwap();

26. }

27.

28. public static MemoryData gather(Sigar sigar) throws SigarException {

29. MemoryData data = new MemoryData();

30. data.populate(sigar);

31. return data;

32. }

33.

34. public static void main(String[] args) throws Exception {

35. Sigar sigar = new Sigar();

36. MemoryData memData = MemoryData.gather(sigar);

37. XStream xstream = new XStream();

38. xstream.alias("MemData", MemoryData.class);

39. System.out.println(xstream.toXML(memData));

40. }

41.

42. }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐