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
根据您提供的信息,当initialSize
参数设置为1或更大的值时,在启动时可能会出现物理连接初始化很慢并报错的情况。报错信息中显示了一个java.net.SocketException: Broken pipe
异常。
这个问题可能有以下几个原因:
1. 数据库连接超时:检查连接池中的连接超时设置,如果设置过短可能导致连接不够用或频繁创建连接,从而导致物理连接初始化慢。建议适当增加连接超时时间,以避免频繁创建连接。
2. 数据库连接数设置不合理:如果连接池中的连接数设置过少,可能导致连接不够用或频繁创建连接,从而导致物理连接初始化慢。建议增加连接数,确保连接池中有足够的连接来处理请求。
3. 数据库连接池配置不合理:连接池的其他配置参数,如最大等待时间、最小空闲连接数等也可能导致物理连接初始化慢。根据实际情况调整连接池的配置参数,以达到最佳性能和资源利用率。
4. 数据库性能问题:数据库本身存在性能问题,如缓慢的查询或死锁等,也可能导致物理连接初始化慢。建议检查数据库的性能瓶颈并进行相应优化。
另外,您还提到将initialSize
设置为0时启动会很快且不报错。这可能是因为当initialSize
为0时,连接池不会预先创建物理连接,而是根据需求动态创建连接,从而避免了初始化慢的问题。但请注意,如果并发请求较多,可能会导致连接不够用。
能是以下原因造成的:
数据库连接超时设置不合理。如果连接池中的连接超时时间设置过短,可能会导致连接不够用或者频繁创建连接,从而导致物理连接初始化很慢。解决方法是适当增加连接超时时间,以避免过于频繁地创建连接。
数据库连接数设置不合理。如果连接池中的连接数设置过少,可能会导致连接不够用或者频繁创建连接,从而导致物理连接初始化很慢。解决方法是适当增加连接数,以确保连接池中有足够的连接来处理请求。
数据库连接池配置不合理。如果连接池的其他配置参数不合理,例如最大等待时间、最小空闲连接数等,也可能会导致物理连接初始化很慢。解决方法是根据实际情况调整连接池的配置参数,以达到最佳的性能和资源利用率。
数据库性能问题。如果数据库本身存在性能问题,例如缓慢的查询或者死锁等,也可能会导致物理连接初始化很慢。解决方法是检查数据库的性能瓶颈,并根据实际情况进行优化。
可能是由于在启动时,Oracle数据库的Socket缓冲区被填满导致的。当缓冲区被填满时,Oracle数据库会发送一个Broken Pipe异常,表示通信中断。可以尝试将initialSize设置为较大的值,比如100,来避免缓冲区被填满的情况。另外,还可以考虑使用连接池来管理数据库连接,这样可以减少数据库连接的创建和释放,从而减少缓冲区被填满的概率
请使用新版本,新加了一个配置asyncInit,看是否是你想要的
https://github.com/alibaba/druid/releases/tag/1.1.4
dataSource.setAsyncInit(true);
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。