【问题标题】:Too many files open when using generic packager with external packager.xml file将通用打包程序与外部 packager.xml 文件一起使用时打开的文件过多
【发布时间】:2019-04-26 12:18:15
【问题描述】:

我正在使用 jpos 2.1.0,而我正在为 iso8583 客户端使用外部打包程序 xml 文件。由于两三天的大量请求,我遇到了“打开的文件太多”,我设置了 ulimit -n = 50000。我怀疑打包程序文件没有正确关闭,因此超出了这个限制。请帮我正确关闭打开的文件。

    JposLogger logger = new JposLogger(isoLogLocation);
    org.jpos.iso.ISOPackager customPackager = new GenericPackager(isoPackagerLocation+iso8583Properties.getPackager());
    BaseChannel channel = new ASCIIChannel(iso8583Properties.getServerIp(), Integer.parseInt(iso8583Properties.getServerPort()), customPackager);
    logger.jposlogconfig(channel);

    try {
        channel.setTimeout(45000);
        channel.connect();
    }catch(Exception ex) {
        log4j.error(ex.getMessage());
        throw new ConnectIpsException("Unable to establish connection with bank.");
    }

    log4j.info("Connection established using ASCIIChannel");

    ISOMsg m = new ISOMsg();
    m.set(0, "1200");
            ........
    m.set(126, "connectIPS");

    m.setPackager(customPackager);
    log4j.info(ISOUtil.hexdump(m.pack()));
    channel.send(m);
    log4j.info("Message has been send");

    ISOMsg r = channel.receive();
    r.setPackager(customPackager);
    log4j.info(ISOUtil.hexdump(r.pack()));
    String actionCode = (String) r.getValue("39");

    channel.disconnect();
    return bancsxfr;
}

【问题讨论】:

    标签: iso8583 jpos


    【解决方案1】:

    你知道当你打开一个文件、一个套接字或一个通道时,你需要关闭它,对吧?

    我在您的尝试中没有看到finally 会关闭频道。

    那里有很大的泄漏。

    【讨论】:

    • 我知道我需要关闭所有打开的频道、文件。但是我找不到这种情况的关闭方法。 org.jpos.iso.ISOPackager 和 BaseChannel 都没有提供 close() 方法来显式关闭 Channel 以及 Packager 文件。如果您能给我一些示例代码,我将不胜感激。
    • channel.disconnect() 将完成这项工作。
    • 我使用的是 channel.disconnect(),但它不在 finally 块中。但我试着保持在 finally 块,仍然遇到同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 2016-08-11
    • 2017-02-25
    • 2016-07-09
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多