QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3061|回复: 2

观察Linux行为(通过/proc)

[复制链接]
发表于 2006-8-4 02:03:00 | 显示全部楼层 |阅读模式
节选自赛迪网
/proc虚拟文件系统

  /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的一些东西还可以参考:http://www.linuxfans.org/nuke/mo ... ew&sid=2609

        在/proc,我们可以看到很多原来在内核理论里看到的东西,像时间片、上下文转换、进程的相关内容......它们现在就活生生的在我们面前,我们可以通过查看、修改这些值,来了解现在就在我们电脑上运行的这个linux。
        下面是一个用C写的小程序,编译运行(如果还不会请参看公社的相关版面)以后运行,可以看到CPU型号和内核版本信息。这只是个小小小程序,你可以修改它打开的文件以显示其他的信息,也可以用程序来修改内核的一些参数。
redhat fc5
[code:1]
#include <stdio.h>
/* get the NUMth line of a file */
char *getN(char line[200],int n, FILE *iop)
{
        rewind(iop);
        int i;
        for( i = 1; i <= n ; i++ )
                fgets(line, 1000, iop);
        return line;
}

main(int argc,char *argv[])
{
        FILE *fp;
        char str[200];
       
        if((fp = fopen("/proc/cpuinfo","r"))==NULL){
                printf("Open Error\n");
                return;
        }
        getN(str,5,fp);
        printf("%s\n",str);
        fclose(fp);

        if((fp = fopen("/proc/version","r"))==NULL){
                printf("Open Error\n");
                return;
        }
        getN(str,1,fp);
        printf("%s\n",str);
        fclose(fp);
}
[/code:1]
发表于 2006-8-4 09:32:56 | 显示全部楼层
帮你顶顶。     
欢迎新版主。
回复

使用道具 举报

 楼主| 发表于 2006-8-4 11:58:02 | 显示全部楼层
:-)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-25 15:11 , Processed in 0.120691 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表