google-app-engine - from - google cloud sql jdbc connection
Error de enlace de comunicaciones intermitentes con Cloud SQL (2)
Estoy usando jmeter
para probar el estrés de un servicio web de GAE que utiliza CloudSQL y estoy recibiendo excepciones intermitentes de fallas en los enlaces de comunicaciones.
Intenté usar conexiones directas y un grupo de conexiones, y veo excepciones en cualquier escenario. Las excepciones aumentan a medida que aumenta el número de solicitudes por segundo.
Tenga en cuenta que estamos utilizando el nivel más alto de cloud sql, D32 y las pruebas están muy por debajo de las conexiones máximas de 3200.
Aquí hay un rastro de pila para referencia:
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)
Actualización: Cambié la configuración del conjunto de conexiones a maxActive = 5 y maxIdle = 5 y las excepciones de enlaces de comunicaciones intermitentes desaparecieron. Tenga en cuenta que he probado commons dbcp y tomcat dbcp. Ahora veo las siguientes excepciones en los registros:
Causado por: java.sql.SQLException: java.lang.SecurityException: no se puede acceder a gatherPerformanceMetrics
Causado por: java.sql.SQLException: java.lang.SecurityException: no se puede acceder a includeThreadDumpInDeadlockExceptions
Causado por: java.sql.SQLException: java.lang.SecurityException: no se puede acceder a nullNamePatternMatchesAll
Https://cloud.google.com/appengine/docs/java/cloud-sql/#Java_Size_and_access_limits
"Cada instancia de App Engine no puede tener más de 12 conexiones concurrentes a una instancia de Google Cloud SQL".
¿Puedes decir más sobre la configuración de la prueba? ¿Cuántas solicitudes está enviando jmeter a appengine y cuántas conexiones abre la instancia de la aplicación para cada una de esas solicitudes?
Para todos los que están buscando por qué podría obtener "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones" en una conexión.
¡Asegúrese de que su IP esté permitida si está llamando desde un servidor de prueba!
Estaba probando en una casa de amigos, y este error inútil siguió apareciendo.