【问题标题】:Intermittent Communications link failure with Cloud SQLCloud SQL 的间歇性通信链接失败
【发布时间】:2014-02-27 20:54:58
【问题描述】:

我正在使用jmeter 对使用 CloudSQL 的 GAE Web 服务进行压力测试,但我遇到了间歇性通信链路故障异常。

我尝试过使用直接连接和连接池,但在这两种情况下我都看到了异常。随着每秒请求数的增加,异常也会增加。

请注意,我们使用的是最高层的云 sql,D32,并且测试远低于最大 3200 个连接。

这是一个堆栈跟踪供参考:

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.GeneratedConstructorAccessor48.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:33)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2413)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2450)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2235)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:818)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.GeneratedConstructorAccessor46.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:33)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
at com.mysql.jdbc.GoogleNonRegisteringDriver$JdbcWrapper.getInstance(GoogleNonRegisteringDriver.java:276)
at com.mysql.jdbc.GoogleNonRegisteringDriver.connect(GoogleNonRegisteringDriver.java:246)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)

更新:我将连接池设置更改为 maxActive = 5 和 maxIdle = 5,并且间歇性通信链接异常消失了。请注意,我已经尝试过 commons dbcp 和 tomcat dbcp。我现在在日志中看到以下异常:

原因:java.sql.SQLException:java.lang.SecurityException:无法访问gatherPerformanceMetrics

原因:java.sql.SQLException:java.lang.SecurityException:无法访问includeThreadDumpInDeadlockExceptions

原因:java.sql.SQLException: java.lang.SecurityException: Unable to access nullNamePatternMatchesAll

【问题讨论】:

    标签: google-app-engine jmeter google-cloud-sql


    【解决方案1】:

    来自https://cloud.google.com/appengine/docs/java/cloud-sql/#Java_Size_and_access_limits

    “每个 App Engine 实例与 Google Cloud SQL 实例的并发连接不能超过 12 个。”

    您能详细介绍一下测试设置吗? jmeter 向 appengine 发送了多少个请求,应用实例为每个请求打开了多少个连接?

    【讨论】:

    • 谢谢!我在当前的 App Engine 文档中找不到 12 个并发限制,但这似乎是真的。我的最大应用程序引擎连接数为 35,显然 35 个用户连接能够超过 12 个数据库连接。我将应用引擎连接数减少到 12 个,虽然我的应用引擎实例增加了,但我不再看到此错误。
    【解决方案2】:

    致所有正在寻找您可能会在连接上收到“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure”的人。

    如果您从测试服务器调用,请确保您的 IP 是允许的!

    我在朋友家测试,这个无益的错误不断出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多