When testing the flash program, there is an exception
in it
sqlalchemy session pool over flow
When I saw the problem for the first time, manual operation could not be repeated
In multi thread mode, if your concurrent request num is much more than the DB connection pool size, it will throw the queue pool limit of size 5 overflow 10 reached error. Try with this:
engine = create_ engine(‘mysql://’, convert_ unicode=True,
pool_ size=20, max_ overflow=100)
to add the pool size
Add: the method above is not a correct way. The actual reason is that db connection pool is used up, and no other available connection. The most probably situation is you miss to release connection. For example:
Referring to the online materials, I did a lot of connection tests with locust and repeated them. From the running records, it seems to be related to the occurrence of an exception
in order to confirm, a function is specially made, which does nothing but throws an exception. As a result, locust only performs a few
connections for ten times, and then starts to reproduce the session poll exception mentioned above. Very accurate
the problem is clear, and the rest becomes simple. After_ Call session.remove in the request procedure to
app.shutdown_ Context process. Then turn off app. Debug
at this time, restart the locust test, execute the connection 4000 times, and the session pool exception never appears again
@app.teardown_appcontext
defshutdown_session(exception=None):
db_session.remove()
reference links
http://www.karoltomala.com/blog/?p=579
http://gexp.iteye.com/blog/737408
https://www.gaott.info/sqlalchemy-auto-commit/
This is more important:
https://github.com/mitsuhiko/flask/issues/661
The main point of this question:
1 must be in app.teardown_ In the process of appcontext, releasing session
2 should turn off app. Debug = true. When this switch is turned on, if an exception occurs,
app.teardown_ If the appcontext is not guaranteed to be executed, the session pool will soon be exhausted. In future database
access operations, any operation will encounter the above-mentioned exception
conclusion
1 the remove call of session should not be called after_ Request, but in app. Teardown_ Appcontext
2 note that app. Debug = true will cause some program behaviors to be different from those of the formal runtime. We need to pay attention to this
Similar Posts:
- [Solved] Python urlib2gaierror: [Errno 11004] getaddrinfo failed
- error communicating with the remote browser. it may have died. [Solved]
- How to Solve Mysql Error 1206: The total number of locks exceeds the lock table size
- [Solved] Grpc.Core.RpcException:“Status(StatusCode=Internal, Detail=”Error starting gRPC call: An error occurred while sending the request.”)”
- [Solved] ConnectionPoolTimeoutException: Timeout waiting for connection from pool
- Mysql Cannot get a connection, pool error Timeout waiting for idle object
- Kubernetes: 413 request entity too large
- mysqlmmap(137428992 bytes) failed; errno 12,Cannot allocate memory for the buffer pool
- [Solved] reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response
- Streams AQ: enqueue blocked on low memory wait event causes slow expdp export