ホームページ  >  に質問  >  本文

java报错Communications link failure 该如何解决?

  1. 就是普通的查询mysql数据库的代码:

  2. 错误栈如下:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2209)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at testHttpConnection.util.DBUtil.getConn(DBUtil.java:26)
    at testHttpConnection.TestMysql.main(TestMysql.java:23)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:675)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1078)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137)
    ... 13 more
Caused by: java.net.SocketException: Permission denied: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2494)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)
    ... 15 more
天蓬老师天蓬老师2743日前535

全員に返信(2)返信します

  • PHPz

    PHPz2017-04-18 10:54:26

    1階とは異なる、以前発生したこのエラーの解決策を共有しましょう:

    リーリー

    エラーの具体的な原因は、JVM の設定変更によるものと思われます。これにより、JVM がネットワーク経由で情報を取得できなくなります

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:54:26

    これで問題が解決されるはずです:
    通信リンク障害の解決策

    Connector/J を使用して MySQL データベースに接続します。プログラムが長時間実行されると、次のエラーが報告されます:
    通信リンク障害、サーバーから最後に正常に受信されたパケットは ミリ秒前でした。パケットがサーバーに正常に送信されたのは ミリ秒前でした。

    このエラーでは、wait_timeout を変更するか、Connector/J の autoReconnect 属性を使用してこのエラーを回避するように求められます。
    いくつかの情報を確認したところ、接続プール方式を使用しているときにこの問題が発生している人がかなりいることがわかりました。接続が短い場合は、この問題が発生するのは難しいはずです。この問題の理由:
    MySQL サーバーのデフォルトの "wait_timeout" は 28800 秒または 8 時間です。これは、接続が 8 時間を超えてアイドル状態である場合、MySQL は自動的に接続を切断しますが、接続プールは接続がまだ有効である必要がある場合 (接続の有効性が検証されていないため)、アプリケーションが接続の使用を申請すると、上記のエラーが発生します。
    MySQL のパラメータを変更します。最大 wait_timeout は 31536000 または 1 年です。my.cnf に追加します。
    [mysqld]
    wait_timeout=31536000
    interactive_timeout=31536000
    これら 2 つのパラメータを同時に変更する必要があります。時間。

    返事
    0
  • キャンセル返事