views:

28

answers:

1

Hi,

I'm injecting a stress test into my web app that connects to a mysql server and I'm monitoring the show processlist of mysql.

When the load is high (high swap i/o) I get many processes like that:

| 97535 | db| localhost | userA | Sleep   |  515 |         | NULL 
| 97536 | db| localhost | userA | Sleep   |  516 |         | NULL 
| 97786 | db| localhost | userA | Sleep   |  343 |         | NULL 
| 97889 | db| localhost | userA | Sleep   |  310 |         | NULL 

But I can't understand why are they still there and are not killed? This eventually leads to my app using all max_connections and stop processing incoming requests...

Any idea what are those processes and what are they doing there :) ?

A: 

Those are idle connections being held by a client. You should make sure that whatever client library you are using (JDBC, ...) is configured to not keep unused connections open so long, or that your # clients * max # of connections isn't too big.

Keith Randall
is there any mysql timeout variable that i can adjust to avoid this?
AlfaTeK
You can set wait_timeout to something smaller (http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_wait_timeout) or raise the connection limit. You really want to solve this on the application side, however. Hanging up the connection from the database side risks closing a connection just as the application tries to use it, potentially causing an application error for no good reason. What database connection library are you using?
Keith Randall