你说的waiting是只nginx监控模块中的waiting?
waiting
-- keep-alive connections, actually it is active - (reading + writing)
这个不是你并发下来就立刻下来的,除非你设置keepalive_disable。 检查你的keepalive_timeout设置。
建议不要每次都
fopen ,可以在初始化的时候吧数据文件读入内存,每次在内存中查找。
在 2012年9月24日 上午9:15,lanxin
<413...@qq.com>写道:
我在使用geoip时觉得他们的库不够准确,在网上搜了一下,感觉WWQry.dat的库比较准确,决定使用它。
但是又想用geoip模块,于是就把geoip-1.4.8中一段程序给改了改。
GeoIPRecord *
GeoIP_record_by_ipnum(GeoIP * gi, unsigned long ipnum)
{
GeoIPRecord *record;
char country[20]={'\0'};
char area[50]={'\0'};
FILE *wry_file;
record = malloc(sizeof(GeoIPRecord));
memset(record, 0, sizeof(GeoIPRecord));
record->charset = gi->charset;
wry_file=fopen("/usr/echo1/QQWry0920.dat","r");
qqwry_get_location_by_long(country,area,ipnum,wry_file);
fclose(wry_file);
record->region = malloc(strlen((char *)country)+1);
strncpy(record->region, (char *) country, strlen((char *)country) + 1);
if (strlen((char *)area)>0){
record->city = malloc(strlen((char *)area)+1);
strncpy(record->city, (char *) area, strlen((char *)area) + 1);
}
return record;
}
其中gi是geoip模块传递过来的不用操心它,gi,record都会在geoip模块中被free。但是我这个程序现在存在一个问题,
并发量很大的时候(超过1w/s),waiting值一直在增加,当并发量降低,不会自动释放。而原先他们自己的程序却会随着
并发量降低,waiting值也降低。
希望大家帮忙看看,怎么解决。
--
Azure.Wang