⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadlog.c

📁 Linux记录CPU和MEM Usage的代码
💻 C
字号:
#include <stdio.h>
#include <time.h>

#include <unistd.h> 
#include <signal.h> 
#include <sys/param.h> 
#include <sys/types.h> 
#include <sys/stat.h>
#include <ftw.h>


void init_daemon(void)
{
	int pid; int i; 
	
	if(pid=fork()) 
		exit(0);
	else if(pid< 0) 
		exit(1);
	
	setsid();
	
	if(pid=fork()) 
		exit(0);
	else if(pid< 0) 
	exit(1);
	
	for(i=0;i< NOFILE;++i)
	close(i); 
	umask(0);
	return; 

}

long get_file_size(char *filename)
{
	struct stat f_stat;

	if (stat(filename,&f_stat)==-1)
	{
		return -1;
	}
	return (long)f_stat.st_size;

}

char *dirpath[10];
//get service name
int fn (const char *file, const struct stat *sb, int flag)
{
	if(flag==FTW_D)
	{
		FILE* fp1;
		fp1 =fopen("servicefile","a+");
 		fprintf (fp1,"%s\n",file);
		fclose(fp1);
		
	}
	return 0;
}

struct loadavg_type
{
	float OneSecond;
	float FiveSecond;
	float FifteenSecond;
	char  *timestamp;
}loadavg;

struct Meminfo_type
{
	long  TotalSize;
	long  TotalUsed;
	long  SwapTotal;
	long  SwapUsed;
	char  *timestamp;
}Meminfo;


int main(int argc, char *argv[])
{
	FILE *fp1; //proc/loadavg
	FILE *fp2; //loadlog_min
	
	time_t time_now;
	
	init_daemon();

	while(1)
	{ 
		sleep(60); //per minute
		/*read loadinfo*/
		fp1 = fopen("/proc/loadavg","r");
		//rewind(fp1);
		fscanf(fp1,"%f %f %f",&loadavg.OneSecond,&loadavg.FiveSecond,
		       &loadavg.FifteenSecond);
		fclose(fp1);
		time(&time_now);
		loadavg.timestamp = ctime(&time_now);

		/*read service data*/
		ftw("/proc/sys/net/pcs_dispatcher",fn,50);
		FILE* fp_dir;
		FILE* fp_servname;
		FILE* fp_servlog;
		fp_dir=fopen("servicefile","r");
		int i=0;
		int total_queue;
		int wait_queue;
		char mypath[50];
		char temp[50];
		char* servicename;
	
		while(!feof(fp_dir))
		{
		   fscanf(fp_dir,"%s\n",mypath);
		   if(i!=0)
		   {
				servicename=mypath;
				strcpy(temp,mypath);

				strcat(mypath,"/total_req_num");
				dirpath[i]=mypath;
				
				fp_servname = fopen(dirpath[i],"r");
				fscanf(fp_servname,"%d",&total_queue);
				fclose(fp_servname);
				
				
				strcat(temp,"/waiting_req_num");
				fp_servname = fopen(dirpath[i],"r");
				fscanf(fp_servname,"%d",&wait_queue);
				fclose(fp_servname);
		   
				fp_servlog = fopen("/home/httpd/html/service/servlog","a+");
				fprintf(fp_servlog,"pcs_service%d  %s   %d  %d  %s",i,servicename,total_queue,wait_queue, ctime(&time_now));
				fclose(fp_servlog);
		   }
		   i=i+1;

		}
		fclose(fp_dir);
		system("rm -f servicefile");

		
		/*write load data*/
		fp2 = fopen("/home/httpd/html/monitor/loadlog_min","a+");
		fprintf(fp2,"%5.3f  %5.3f  %5.3f  %s",loadavg.OneSecond,
		loadavg.FiveSecond,loadavg.FifteenSecond,loadavg.timestamp);
		fclose(fp2);

		fp1 = fopen("/proc/meminfo","r");
		fseek(fp1,66,SEEK_SET);
		fscanf(fp1,"%ld %ld",&Meminfo.TotalSize,&Meminfo.TotalUsed);
		fseek(fp1,131,SEEK_SET);
		fscanf(fp1,"%ld %ld",&Meminfo.SwapTotal,&Meminfo.SwapUsed);
		fclose(fp1);
		fp2 = fopen("/home/httpd/html/monitor/memlog_min","a+");
		fprintf(fp2,"%ld  %ld  %ld  %ld  %s",Meminfo.TotalSize,Meminfo.TotalUsed,
                        Meminfo.SwapTotal,Meminfo.SwapUsed,loadavg.timestamp);
		fclose(fp2);

		long loadlogsize,servlogsize;
		loadlogsize=get_file_size("/home/httpd/html/monitor/loadlog_min");
		servlogsize=get_file_size("/home/httpd/html/service/servlog");
		
		
		if(loadlogsize>= 8L*1024L*1024L)
		{				
			system("tail -n 15 /home/httpd/html/monitor/loadlog_min >temp");
			fp1 = fopen("/home/httpd/html/monitor/loadlog_min","w+");
			system("cat temp > /home/httpd/html/monitor/loadlog_min");			
			system("rm -f temp");
			fclose(fp1);

			system("tail -n 15 /home/httpd/html/monitor/memlog_min >temp");
			fp2 = fopen("/home/httpd/html/monitor/memlog_min","w+");
			system("cat temp > /home/httpd/html/monitor/memlog_min");
			system("rm -f temp");
			fclose(fp2);
			
		}
		if(servlogsize>= 8L*1024L*1024L)
		{
			system("tail -n 15 /home/httpd/html/service/servlog >temp");
			fp1 = fopen("/home/httpd/html/service/servlog","w+");
			system("cat temp > /home/httpd/html/service/servlog");                
			system("rm -f temp");
			fclose(fp1);
											
		}
		
		
	}//daemon 
	
	return 0;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -