1.在linux 系统中,可以使用 lsof -p 端口号|wc -l 查看,会发现ip2region占用的连接一直得不到释放 StringUtils getCityInfo 方法中 排查了下,发现是没有关闭流导致的
Q
[elunez/eladmin]ip2region 操作工具方法没有关闭连接,会导致连接一直无法释放
3
A
回答
1
之前因为这个问题遇到了文件句柄数太多 too many open files的问题,后来我就把这个方法给注释掉了。。
1
注释掉倒是没必要,在方法下面吧流关闭掉就可以了,还有啊,建议项目启动的时候初始化这个获取IP的对象,后面直接拿,没必要,来一次建立一次连接,太耗性能了
3
public static String getCityInfo(String ip) {
try {
String path = "ip2region/ip2region.db";
String name = "ip2region.db";
DbConfig config = new DbConfig();
File file = FileUtil.inputStreamToFile(new ClassPathResource(path).getStream(), name);
DbSearcher searcher = new DbSearcher(config, file.getPath());
Method method;
method = searcher.getClass().getMethod("btreeSearch", String.class);
DataBlock dataBlock;
dataBlock = (DataBlock) method.invoke(searcher, ip);
String address = dataBlock.getRegion().replace("0|", "");
if (address.charAt(address.length() - 1) == '|') {
address = address.substring(0, address.length() - 1);
}
searcher.close();
return address.equals(ElAdminConstant.REGION) ? "内网IP" : address;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
这样改对吗
6
不对,还是没关闭掉,我pull request 里面有优化后的代码~
4
我优化的里面,没有去优化在项目启动的时候建立连接,这方面还得你们自己搞下,不然还是会每次都建立连接关闭,建立连接关闭,一直循环着
0
哈哈还没看,最近没太关注,确实每个请求都要建立一次连接很消耗资源,用户的ip短期内也不会变。
2
额,可以去看看,修复了很多错误,你们不合并,我后面的修复错误无法再次提交 前端也提交了,也看下吧,觉得合适就合并掉,不合适就打回~·
9
emm..这个除了作者我们有权限合并吗
7
不知道有没有给你权限~·~给了就可以了,你现在的代码,是直接拉取的么还是pull requests 方式提交的?
2
哈哈哈我就是个潜水党,还没参与这个项目呢,每次更新了我都拉下来然后手动合并到自己的项目里
2
额,我还以为你是参与的人员呢,我也是,提交了好久都没人合并,哎
7
em,这个我就不清楚了,不过看了下你的PR,单点登录、清日志啥的挺实用的
6
本来还有黑名单这块的,单点本地也改成了,配置开关,这些代码现在都无法pull requests ,被前面的压着,提交不了
3
em,希望作者早日合并,我们也能早日拉到最新的代码哈哈
9
哈哈,自己动手改吧,我现在都是弄成了2个项目,分开,这边同步这里的代码,那边实现修复自己的
3
已处理 pull request