diff --git a/code/trunk/LATEST b/code/trunk/LATEST new file mode 100644 index 0000000..2e0e38c --- /dev/null +++ b/code/trunk/LATEST @@ -0,0 +1 @@ +1.9 diff --git a/code/trunk/README b/code/trunk/README index 7eeaeda..3c88025 100644 --- a/code/trunk/README +++ b/code/trunk/README @@ -1,6 +1,9 @@ ========= 编译说明: 在Rocky 4.2上编译 + 编译前先安装dotconf软件包。 + + pkgadd dotconf#1.0.13-1.pkg.tar.gz 执行: sh build.sh 将在当前的目录下生成安装包: sys_nicmonitor#1.8.1-x86_64-Linx-Rocky4.2.pkg.tar.gz diff --git a/code/trunk/src/Pkgfile b/code/trunk/src/Pkgfile index 52c988e..afa9a28 100644 --- a/code/trunk/src/Pkgfile +++ b/code/trunk/src/Pkgfile @@ -5,7 +5,7 @@ # Depends on: libart_lgpl libcgi libgd pango python tcl intltool name=sys_nicmonitor -version=1.8.1 +version=1.9 release=x86_64-Linx-Rocky4.2 workdir=`pwd` #source=/home/d5000/d5000/linx/1.8/$name-$version.tar.gz diff --git a/code/trunk/src/README1.8 b/code/trunk/src/README similarity index 59% rename from code/trunk/src/README1.8 rename to code/trunk/src/README index 356afb1..726685a 100644 --- a/code/trunk/src/README1.8 +++ b/code/trunk/src/README @@ -1,27 +1,52 @@ ========= +编译前准备: + 编译前先安装dotconf软件包。 + libman.so拷贝到/usr/lib64/下 + pkgadd dotconf#1.0.13-1.pkg.tar.gz + 编译说明: 在Rocky 4.2上编译 - 1)修改Pkgfile中的source指向的源文件位置 - 2)然后执行: sh build.sh + + 执行: sh build.sh 将在当前的目录下生成安装包: - sys_nicmonitor#1.8-x86_64-Linx-Rocky4.2.pkg.tar.gz + sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz ======== 安装说明: 1)安装,以root的用户执行安装命令: - pkgadd sys_nicmonitor#1.8-x86_64-Linx-Rocky4.2.pkg.tar.gz + pkgadd sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz 如果之前已经安装,则可先卸载旧的然后再安装,或者通过更新方式安装 卸载命令: pkgrm sys_nicmonitor 更新方式安装命令: - pkgadd -u sys_nicmonitor#1.8-x86_64-Linx-Rocky4.2.pkg.tar.gz + pkgadd -u sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz 2)查看安装是否成功 pkginfo -i|grep sys_nicmonitor 或者 - 查看d5000用户的目录下lib/libnic_shm.so和bin/sys_nicmonitor的日期是否 + 查看d5000用户的目录下lib/libnic_shm.so和bin/sys_nicmonitor的日期是否匹配 ======== + 版本说明: +--V1.9 -- + 2013-08-12 + 1)修复问题:占用内存快速累加,导致内存占用很大 + 问题描述:日志线程资源退出时未回收,导致占用内存快速累加 + 解决办法:修改为一个日志线程,并且线程退出时设置为自动回收。 + 将日志写文件的地方放到common.c中,以便动态库和daemon程序使用一个。 + + 2)修复问题:日志文件名在家目录或者var目录下,未在规定位置 + 问题描述:日志文件命名在一个单独的线程进行,导致日志线程和该线程对log_path存在同时访问的情况。 + 导致在换天或者换月时,日志文件名变更一半时,日志写线程此时写日志,用未更新完成的 + log_path创建日志,导致日志文件不再规定的位置。 + 解决办法:增加线程互斥锁pthread_mutex对log_path进行保护,修复该问题。 + + +--V1.8.1-- + 2013-06-05 + 1)修改BUG:ping_gw函数当PING失败时没有尝试对余下的GW进行PING操作 + 2)增加环境变量SYS_NIC_DEBUG用于调试流量抖动问题。 + --V1.8 -- 2013-05-27 对系统高磁盘IO情况下,应用如果进行IO将可能会被阻塞。本版本为此作出调整。 diff --git a/code/trunk/src/V1.8 b/code/trunk/src/V1.8 deleted file mode 100644 index e69de29..0000000 diff --git a/code/trunk/src/sys_nicmonitor-1.9.tar.gz b/code/trunk/src/sys_nicmonitor-1.9.tar.gz new file mode 100644 index 0000000..75a49d3 Binary files /dev/null and b/code/trunk/src/sys_nicmonitor-1.9.tar.gz differ diff --git a/code/trunk/sys_nicmonitor/README b/code/trunk/sys_nicmonitor/README new file mode 100644 index 0000000..726685a --- /dev/null +++ b/code/trunk/sys_nicmonitor/README @@ -0,0 +1,90 @@ +========= +编译前准备: + 编译前先安装dotconf软件包。 + libman.so拷贝到/usr/lib64/下 + pkgadd dotconf#1.0.13-1.pkg.tar.gz + +编译说明: + 在Rocky 4.2上编译 + + 执行: sh build.sh + 将在当前的目录下生成安装包: + sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz + +======== +安装说明: + 1)安装,以root的用户执行安装命令: + pkgadd sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz + 如果之前已经安装,则可先卸载旧的然后再安装,或者通过更新方式安装 + 卸载命令: pkgrm sys_nicmonitor + 更新方式安装命令: + pkgadd -u sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz + + 2)查看安装是否成功 + pkginfo -i|grep sys_nicmonitor + 或者 + 查看d5000用户的目录下lib/libnic_shm.so和bin/sys_nicmonitor的日期是否匹配 + +======== + +版本说明: +--V1.9 -- + 2013-08-12 + 1)修复问题:占用内存快速累加,导致内存占用很大 + 问题描述:日志线程资源退出时未回收,导致占用内存快速累加 + 解决办法:修改为一个日志线程,并且线程退出时设置为自动回收。 + 将日志写文件的地方放到common.c中,以便动态库和daemon程序使用一个。 + + 2)修复问题:日志文件名在家目录或者var目录下,未在规定位置 + 问题描述:日志文件命名在一个单独的线程进行,导致日志线程和该线程对log_path存在同时访问的情况。 + 导致在换天或者换月时,日志文件名变更一半时,日志写线程此时写日志,用未更新完成的 + log_path创建日志,导致日志文件不再规定的位置。 + 解决办法:增加线程互斥锁pthread_mutex对log_path进行保护,修复该问题。 + + +--V1.8.1-- + 2013-06-05 + 1)修改BUG:ping_gw函数当PING失败时没有尝试对余下的GW进行PING操作 + 2)增加环境变量SYS_NIC_DEBUG用于调试流量抖动问题。 + +--V1.8 -- + 2013-05-27 +对系统高磁盘IO情况下,应用如果进行IO将可能会被阻塞。本版本为此作出调整。 +cs-fes1上编译测试OK。 + +1) 去掉shm和sem的实体文件 +#define SHM_PATH "$D5000_HOME/share/sys_netcard_shm_path" +#define SEM_PATH "$D5000_HOME/share/sys_netcard_sem_path" + +用key=0x1d5200 代替 sem +用key=0x1d5010 代替 shm + + +2)去掉动态库中get_nic_info接口中,判断路径的opendir调用,采用实际路径 + 上层应用每秒可能调用3次这个接口,每判断一个网卡都调用一次,判断都个网卡的状态时就调用多次。 + + 可改进:一次调用get_nic_info接口,可输入多个网卡,一次返回所有网卡状态信息。 + +3) record_log函数为日志函数,每次写一次,都重新打开一次文件。 + 修改为线程模式,当记录日志时,不会被磁盘IO阻塞。 + +4) 安装目录为d5000用户的HOME目录下的lib和bin目录 + +---- + + +V1.6与V1.7差异 +共享内存路径修改: +由/home/d5000/someone/tmp/sys_netcard_shm_path 改为 /home/d5000/someone/share/sys_netcard_shm_path +信号量路径修改: +由/home/d5000/someone/tmp/sys_netcard_sem_path 改为 /home/d5000/someone/share/sys_netcard_sem_path + +注意:在编译过程中,需要动态看libman.so,它存放在目录 tags/下面 ,在进行编译的时候需要将其拷贝到 +/lib64/目录下,编译的基础环境是 Rocky 4.2 系统。 + +pkgmk命令的使用: +将源代码打包成name-version.tar.gz样式,编写Pkgfile文件。 +使用命令: + pkgmk -um #更新软件包的md5值 + pkgmk -kw #制作pkg安装包 + diff --git a/code/trunk/sys_nicmonitor/bin/sys_nicmonitor b/code/trunk/sys_nicmonitor/bin/sys_nicmonitor deleted file mode 100755 index 93809ce..0000000 Binary files a/code/trunk/sys_nicmonitor/bin/sys_nicmonitor and /dev/null differ diff --git a/code/trunk/sys_nicmonitor/common.c b/code/trunk/sys_nicmonitor/common.c new file mode 100644 index 0000000..8c36348 --- /dev/null +++ b/code/trunk/sys_nicmonitor/common.c @@ -0,0 +1,159 @@ + +static pthread_mutex_t lock_record_logpath = PTHREAD_MUTEX_INITIALIZER; +#define LOGPATH_LOCK pthread_mutex_lock(&lock_record_logpath) +#define LOGPATH_UNLOCK pthread_mutex_unlock(&lock_record_logpath) + + +static pthread_mutex_t lock_record_log = PTHREAD_MUTEX_INITIALIZER; +#define LOG_LOCK pthread_mutex_lock(&lock_record_log) +#define LOG_UNLOCK pthread_mutex_unlock(&lock_record_log) + +#define MAX_LOG_COUNT 5000 +static char **log_prepare = NULL; +static char **log_writing = NULL; +static int log_thread_exit = 1; +static int log_idx = 0; + +void create_dir(char *create_path) +{ + int i,len = strlen(create_path); + + for(i=1; i #include #include #include @@ -20,7 +21,7 @@ #define IPLEN 16 #define CONF_FILE "/conf/nic/sys_netcard_conf.txt" -#define MNIC_VERSION "1.8.1" +#define MNIC_VERSION "1.9" #define NIC_UNKNOWN 0 #define NIC_DOWN 1 @@ -161,28 +162,72 @@ static int sys_nic_debug = 0; void create_dir(char *create_path); +#if 0 +///////////////// no use + static pthread_mutex_t lock_record_log = PTHREAD_MUTEX_INITIALIZER; #define LOG_LOCK pthread_mutex_lock(&lock_record_log) #define LOG_UNLOCK pthread_mutex_unlock(&lock_record_log) -//static int is_checkdir = 0; + +#define MAX_LOG_COUNT 5000 +static char **log_prepare = NULL; +static char **log_writing = NULL; +static int log_thread_exit = 1; +static int log_idx = 0; + static void *record_log_thread( void *arg ) { - char *log_str = (char *)arg; + char *log_str; FILE *log_fp = NULL; + char **tmp = NULL; + inti i = 0; - LOG_LOCK; -// if( !is_checkdir ) { - create_dir( log_path ); -// is_checkdir = 1; -// } - if((log_fp = fopen(log_path, "a")) != NULL){ - if(fwrite(log_str, 1, strlen(log_str), log_fp) < 1){ + create_dir( log_path ); + + log_thread_exit = 0; + + log_fp = fopen(log_path, "a"); + + while( !log_thread_exit ) { + if( !log_fp ) { + log_fp = fopen(log_path, "a"); } - fclose(log_fp); - } - LOG_UNLOCK; - free(log_str); + //prepare log strings + LOG_LOCK; + tmp = log_writing; + log_writing = log_prepare; + log_prepare = log_writing; + log_idx=0; + LOG_UNLOCK; + + while( i < MAX_LOG_COUNT ) { + log_str = log_writing[i]; + + if( log_str == NULL ) { + break; + } + + if( log_fp ) { + fwrite( log_str, 1, strlen(log_str), log_fp ); //write to file + } + + free( log_str ); //free + log_writing[i] = NULL; //clear + + //next + i++; + } + usleep(100); + } //while + + if( log_fp ) { + fclose(log_fp); + } + if( log_prepare ) free( log_prepare ); + if( log_writing ) free( log_writing ); + log_prepare = NULL; + log_writing = NULL; return NULL; } @@ -219,43 +264,54 @@ void record_log(char *str) fclose(log_fp); } #else + static int log_thread_started = 0; time_t tamp; char str_tm[4]; char log_str[512]; -// FILE *log_fp = NULL; struct tm tmptr; struct timeval tv; struct timezone tz; - -// if((log_fp = fopen(log_path, "a")) != NULL){ - tamp = time(NULL); - memset(str_tm, 0, sizeof(str_tm)); - memset(log_str, 0, sizeof(log_str)); - localtime_r(&tamp, &tmptr); - gettimeofday(&tv, &tz); - snprintf(str_tm, sizeof(str_tm), "%d", (int)tv.tv_usec/1000); - if(str_tm[1] == '\0')str_tm[1] = '0'; - if(str_tm[2] == '\0')str_tm[2] = '0'; - strftime(log_str, sizeof(log_str), "%F %T.", &tmptr); - strcat(log_str, str_tm); - strcat(log_str, " "); - strcat(log_str, process_name); - strcat(log_str, " "); - strcat(log_str, str); -// if(fwrite(log_str, 1, strlen(log_str), log_fp) < 1){ -// } -// fclose(log_fp); - -// } - -{ pthread_t pid; char *keepstr = strdup( log_str ); - pthread_create( &pid, NULL, record_log_thread, (void *)keepstr); -} + + tamp = time(NULL); + memset(str_tm, 0, sizeof(str_tm)); + memset(log_str, 0, sizeof(log_str)); + localtime_r(&tamp, &tmptr); + gettimeofday(&tv, &tz); + snprintf(str_tm, sizeof(str_tm), "%d", (int)tv.tv_usec/1000); + if(str_tm[1] == '\0')str_tm[1] = '0'; + if(str_tm[2] == '\0')str_tm[2] = '0'; + strftime(log_str, sizeof(log_str), "%F %T. %s %s %s", &tmptr, str_tm, process_name, str ); + + //check log thread + if( log_thread_started == 0 ) { + log_thread_started = 1; + log_prepare = (char **)malloc( sizeof(char *)*MAX_LOG_COUNT ); + log_writing = (char **)malloc( sizeof(char *)*MAX_LOG_COUNT ); + memset( log_prepare, 0, sizeof(char *) *MAX_LOG_COUNT ); + memset( log_writing, 0, sizeof(char *) *MAX_LOG_COUNT ); + log_idx = 0; + + pthread_create( &pid, NULL, record_log_thread, (void *)NULL ); + } + + LOG_LOCK; + if( log_prepare ) { + log_prepare[log_idx] = keepstr; + log_idx++; + } + LOG_UNLOCK; + #endif } +#else + +#include "common.c" +#endif + + static void init_sem(int *semid, CONFIG_FILE_ST *ptr) { key_t key; @@ -908,6 +964,7 @@ static void *create_logfile(void *ptr) else if(old_day != tmptr.tm_mday)flag = 1; else flag = 0; if(flag){ + LOGPATH_LOCK; s = strrchr(log_path, '/'); s++; *s = '\0'; @@ -916,6 +973,7 @@ static void *create_logfile(void *ptr) strcat(buf, process_name); strcat(buf, ".log"); strcat(log_path, buf); + mode_t mask_tmp; mask_tmp = umask(0000); if((fd = open(log_path, O_RDWR|O_CREAT, 0666)) != -1){ @@ -923,6 +981,8 @@ static void *create_logfile(void *ptr) close(fd); } umask(mask_tmp); + LOGPATH_UNLOCK; + old_mon = tmptr.tm_mon+1; old_day = tmptr.tm_mday; strcpy(del_file[head++], log_path); @@ -1246,29 +1306,6 @@ int get_broad_ip(void) return 0; } -void create_dir(char *create_path) -{ - int i,len = strlen(create_path); - - len = strlen(create_path); - - for(i=1; i