[elunez/eladmin]ip2region 操作工具方法没有关闭连接,会导致连接一直无法释放

2023-12-11 785 views
3

1.在linux 系统中,可以使用 lsof -p 端口号|wc -l 查看,会发现ip2region占用的连接一直得不到释放 StringUtils getCityInfo 方法中 排查了下,发现是没有关闭流导致的

回答

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