用C取得Linux负荷值?

    oramon程序可以记录Oracle数据库的很多运行特征, 但还是需要记录一些OS级别的值, 最想要的是Load Average的三个值了, 另外还有CPU的利用率了. 在Solaris下可以用kstat库来取得这些值, 在AIX下可以用perfstat库的函数, 来搞定这些值. 但是在Linux上, 虽然说它是开源的, 但却没有搞定这几个值如何用C程序取出来的.

    用了最土的方法, 现在用的Linux基本上都是Kernel 2.4以上的了, 取得Load Average的话, 就直接访问"/proc/loadavg"算了.

float getloadavg1m()
{
  FILE *fp=NULL;
  char tmpbuf[128];

  if ((fp=fopen("/proc/loadavg","r"))!=NULL)
  {
      fscanf(fp,"%s",tempbuf);
      fclose(fp);
      return atof(tempbuf);
  }
  return 0f;
}

    这种打开文件的方法, 绝对算是很土, 但是运行还是很稳定, 每隔十秒钟打开一次应当问题不大. 只是取CPU的利用率, 就搞不定了, 谁能介绍更好的方法?

留言 (9)

其实可以直接通过SNMP来获取load,CPU等信息,简单而且方便,更便于集中式监控。

在linux下直接用w就可以了。

是要集成到用C语言写的工具中。

经过我的压力测试发现 linux的loading值非常有用,其他的值不好讲,loading千万不要持续在2以上,否则会出现应用程序长时间被挂起的现象

这个和CPU数目有关吧,CPU数目多的话,Load高一点也顶得住。

现在只是感觉到Linux的Load很敏觉,有些神经质。Load高了,会没有办法登录系统进行处理,应当是Linux内核的实时性不够好,不能保证后台系统进程能获得较高的优先级,这一点让人很不爽。

如果频繁做写盘操作,linux在30小时后会有一次时间大约2小时的交换分区整理过程,这段时间网络程序都会掉线,好像还不是内核的原因,另外希望老大能指导一下怎么分析dmp文件格式,谢谢了

为这个要研究DMP格式,绝对不是准确的做法。如果是一次性的,下一个Oracle先用一下好了。

就是要做一个C或者java程序专门来做DMP格式的转换,是业务的需要,不是一次性的。现在还剩下date字段,timestamp字段,和文件头部分还有SQL语句和数据中夹的的那部分看不懂是什么意思,还请老大赐教!!!

不同版本的DMP格式上还会不一样,你这样做实在不是好方法。如果常用,为什么不能让别人提供格式文本文件呢?

发表留言: