开发者社区> 问答> 正文

初始化物理连接很慢,然后会报错

1、如果initialSize为1或者更大,在启动时会很慢,然后报错

Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.7.0_80] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) ~[na:1.7.0_80] at java.net.SocketOutputStream.write(SocketOutputStream.java:159) ~[na:1.7.0_80] at oracle.net.ns.DataPacket.send(DataPacket.java:199) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:227) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.net.ns.NetInputStream.read(NetInputStream.java:175) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.net.ns.NetInputStream.read(NetInputStream.java:100) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.net.ns.NetInputStream.read(NetInputStream.java:85) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:122) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:78) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:359) ~[ojdbc6-ojdbc6-11.1.0.7.0-jar.jar:11.2.0.1.0]

2、如果initialSize为0,则启动会很快,不报错

原提问者GitHub用户LUAgam

展开
收起
山海行 2023-07-05 20:41:47 61 0
4 条回答
写回答
取消 提交回答
  • 根据您提供的信息,当initialSize参数设置为1或更大的值时,在启动时可能会出现物理连接初始化很慢并报错的情况。报错信息中显示了一个java.net.SocketException: Broken pipe异常。

    这个问题可能有以下几个原因:

    1. 数据库连接超时:检查连接池中的连接超时设置,如果设置过短可能导致连接不够用或频繁创建连接,从而导致物理连接初始化慢。建议适当增加连接超时时间,以避免频繁创建连接。

    2. 数据库连接数设置不合理:如果连接池中的连接数设置过少,可能导致连接不够用或频繁创建连接,从而导致物理连接初始化慢。建议增加连接数,确保连接池中有足够的连接来处理请求。

    3. 数据库连接池配置不合理:连接池的其他配置参数,如最大等待时间、最小空闲连接数等也可能导致物理连接初始化慢。根据实际情况调整连接池的配置参数,以达到最佳性能和资源利用率。

    4. 数据库性能问题:数据库本身存在性能问题,如缓慢的查询或死锁等,也可能导致物理连接初始化慢。建议检查数据库的性能瓶颈并进行相应优化。

    另外,您还提到将initialSize设置为0时启动会很快且不报错。这可能是因为当initialSize为0时,连接池不会预先创建物理连接,而是根据需求动态创建连接,从而避免了初始化慢的问题。但请注意,如果并发请求较多,可能会导致连接不够用。

    2023-07-30 14:05:44
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    能是以下原因造成的:

    数据库连接超时设置不合理。如果连接池中的连接超时时间设置过短,可能会导致连接不够用或者频繁创建连接,从而导致物理连接初始化很慢。解决方法是适当增加连接超时时间,以避免过于频繁地创建连接。

    数据库连接数设置不合理。如果连接池中的连接数设置过少,可能会导致连接不够用或者频繁创建连接,从而导致物理连接初始化很慢。解决方法是适当增加连接数,以确保连接池中有足够的连接来处理请求。

    数据库连接池配置不合理。如果连接池的其他配置参数不合理,例如最大等待时间、最小空闲连接数等,也可能会导致物理连接初始化很慢。解决方法是根据实际情况调整连接池的配置参数,以达到最佳的性能和资源利用率。

    数据库性能问题。如果数据库本身存在性能问题,例如缓慢的查询或者死锁等,也可能会导致物理连接初始化很慢。解决方法是检查数据库的性能瓶颈,并根据实际情况进行优化。

    2023-07-30 13:36:29
    赞同 展开评论 打赏
  • 可能是由于在启动时,Oracle数据库的Socket缓冲区被填满导致的。当缓冲区被填满时,Oracle数据库会发送一个Broken Pipe异常,表示通信中断。可以尝试将initialSize设置为较大的值,比如100,来避免缓冲区被填满的情况。另外,还可以考虑使用连接池来管理数据库连接,这样可以减少数据库连接的创建和释放,从而减少缓冲区被填满的概率

    2023-07-11 10:14:58
    赞同 展开评论 打赏
  • 请使用新版本,新加了一个配置asyncInit,看是否是你想要的

    https://github.com/alibaba/druid/releases/tag/1.1.4

    dataSource.setAsyncInit(true);

    原回答者GitHub用户wenshao

    2023-07-06 11:45:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载