/proc虚拟文件系统

来源:互联网 发布:程序员与架构师 编辑:程序博客网 时间:2024/05/17 14:19
/proc虚拟文件系统(也叫procfs)是Unix操作系统所使用的虚拟文件系统的Linux实现,包括Sun Solaris、LinuxBSD。在/proc开始时,它以一个标准文件系统出现,并包含与正在运行的进程IDs同样名字的文件。然而,在/proc中的文件不占用磁盘空间,它们存在于工作存储器(内存)中。/proc最初的目的是便于进程信息的存取,但是现在,在Linux中,它可被内核的每一部分使用来报告某些事情。

  在/proc文件系统提供的成百上千的值当中,我们将集中考虑集群监控所需的最小集,它们包括:

  ◆ /proc/loadavg:包含系统负载平均值;

  ◆ /proc/meminfo:包含存储管理统计量;

  ◆ /proc/net/dev:包含网卡度量;

  ◆ /proc/stat:包含内核统计量;

  ◆ /proc/uptime:包含总的系统正常工作时间及空闲时间。

  每个文件提供的值的数量是不同的。这些文件的完整有效值列表如下。

  ◆ /proc/loadavg提供以下数据:

  1秒钟平均负载;

  5秒钟平均负载;

  15秒钟平均负载;

  总作业数;

  正在运行的作业总数。

  ◆ /proc/meminfo提供的存储器信息包括:

  活动存储器;

  不活动存储器;

  缓冲存储器;

  高速缓冲存储器;

  总的自由存储器;

  总的高位存储器;

  自由高位存储器;

  总的低位存储器;

  自由低位存储器;

  共享存储器;

  交换存储器;

  交换高速缓冲存储器;

  交换自由存储器;

  总存储器。

  ◆ /proc/net/dev中包括每个网卡的如下数据:

  接收到的字节;

  接收到的压缩字节;

  收到的误码数;

  收到的漏失误码;

  收到的FIFO误码;

  收到的帧误码;

  收到的多播误码;

  收到的总包数;

  已传输的字节;

  已传输的压缩字节;

  传输误码总数;

  传输载波误码;

  传输冲突误码;

  传输漏失误码;

  传输FIFO误码;

  传输的总包数。
◆ /proc/stat提供:

  引导时间;

  上下文切换数量;

  中断总量;

  进页面总数;

  出页面总数;

  进程总数;

  换入总数;

  换出总数;

  合计CPU空闲时间;

  合计CPU nice时间;

  合计CPU系统时间;

  合计CPU用户时间。

  同时提供对每个CPU的:

  单个CPU空闲时间;

  单个CPU nice时间;

  单个CPU系统时间;

  单个CPU用户时间。

  以及对每个磁盘驱动器的如下数据:

  单个磁盘块读;

  单个磁盘块写;

  单个磁盘I/O总数;

  单个磁盘I/O读;

  单个磁盘I/O写。

  ◆ /proc/uptime中包括:

  系统总工作时间;

  系统总空闲时间。

  值得注意的是,每次某个/proc被读时,一个句柄函数都被内核或特有模块调用,来产生数据。数据在运行中产生,不管是读一个字符还是一个大的字块,整个文件都将被重建。这对效率是至关重要的一点,因为使用/proc的任何系统监控器将吞下整个文件,而不是一点一点地处理它。

  Java提供了丰富的文件I/O类集,包括基于类的流、基于类的块设备,以及J2SDK 1.4提供的新的I/O库。实验表明,一般而言,对基本的块读写文件操作,用RandomAccessFile类进行I/O是最佳的。例如,块读文件操作如下:

  mFile = new RandomAccessFile( "/proc/meminfo", "r" );

  //以读方式打开文件

  mFile.read( mBuffer ); //读文件块

  结论

  本文讨论了如何将Java语言有效地用于Linux集群结点上的高性能监控。在程序设计中,要注意以下方面:

  ◆ 采用/proc文件系统;

  ◆ 以块形式读/proc文件,而不是以行或字符形式;

  ◆ 在读文件期间保持文件打开;

  ◆ 消除不必要的数据转换;

  ◆ 在结点上合并数据;

  ◆ 以压缩形式传输数据;

  ◆ 注意与性能问题相关的语言或库。
 
原创粉丝点击