sergtk
sergtk

Reputation: 10974

php script randomly hangs up

I install php 5 (more precisely 5.3.1) as apache module.

After this one of my application becomes randomly hang up on mysql_connect - sometimes works, sometimes no, sometimes reload of page helps.

How can this be fixed?

I use Windows Vista, Apache/2.2.14 (Win32) PHP/5.3.1 with php module, MySql 5.0.67-community-nt.

After a minute I obtain the error message:

Fatal error: Maximum execution time of 60 seconds exceeded in path\to\mysqlcon.php on line 9

I run MySql locally and heavy load could not be a reason:

SHOW PROCESSLIST shows about 3 process

SHOW VARIABLES LIKE 'MAX_CONNECTIONS' is 100.

UPDATE:

At first I thought that this is connected with mysql_connect. But now I can't say for certain.

More difficult thing is when I insert the line to debug:

$fh = fopen("E://_debugLog", 'a'); fwrite($fh, __FILE__ . " : " . __LINE__ . "\n"); fclose($fh);

script start working near that location as a rule.

Restart of apache resolve the issue.

Upvotes: 1

Views: 4504

Answers (3)

sergtk
sergtk

Reputation: 10974

It is connected with the issue described at Did I find a bug in PHP's `crypt()`?

Upvotes: 1

labratmatt
labratmatt

Reputation: 1841

Try to isolate the problem:

  1. Shut everything down (apache mysql).
  2. Bump the logging levels of apache and mysql to a detailed level (so that you're logging almost everything).
  3. Pull the single function/piece of code that calls mysql_connect out of your existing script and create a new script that does nothing else but query mysql and return the results. (You can also comment everything out of your existing script).
  4. Start everything back up and look in the logs for anything out of the ordinary.
  5. Execute your script and examine the logs. Was it slow? Anything weird in the logs? If it wasn't slow, start adding in/uncommenting things from your original script. Does it slow down? What is showing up in the logs?

Upvotes: 1

Marc B
Marc B

Reputation: 360872

You may be hitting the MySQL connection limit, and the script attempting to connect will spin its wheels until a connection is made available, but runs into the max execution time limit before that happens. When you hit one of these long pauses, hop into the mysql monitor and do SHOW PROCESSLIST, which will list all connections to the server. You can retrieve the connection limit with SHOW VARIABLES LIKE 'MAX_CONNECTIONS'. If the number of active processes is close to or at the max_connections value, that's your problem.

Upvotes: 1

Related Questions