Php CPU kullanımı% 97 gösteren

3 Cevap

Ben flash ve php kullanarak geliştirilen bir oyun sitesi var. Php kodu 4000 satırları içeren ve bir cron olarak çalışacaktır. Herhangi bir veri kontrol etmek için infinitely çalışacak döngü sokete yazılmış ve buna göre farklı işlevleri çağırmak ve prizlere geri sonuçları göndereceğiz iken kodu içinde, bir tane var. Flaş, bu sonuçlar alacak ve görüntülenir.

Sorun Im bakan yerde php kodundan, bu bellek sızıntı vardır. Çok büyük olduğundan, ben oluyor yerden dışarı bulamıyor. Üstelik sadece bir cron olarak çalıştırılabilir. Bellek sızıntısını bulmak için herhangi bir araç var mı? Ben xdebug duydum ama ben kullanmadım. Başka bir?

check.php (cron olarak)

$sock = fsockopen(IP_ADDRESS, PORT, $sock_error_code, $sock_error_string, 10); if (!$sock){
      $message = "Server was down, restarting...\n\n";  
      $last_line = system("php -q gameserver/server.php", $retval);} else {
         $message = "Server is up...";
         $message .= $sock_error_string." (".$sock_error_code.")\n\n";}

server.php (bir kısmı sadece)

class gameserver {
var $server_running = true;
function gameserver() {
	global $cfg, $db;

	$this->max_connections = $cfg["server"]["max-connections"];

	$this->start_socket();

	echo "Gameserver initialized\n";
	while ($this->server_running) {
		$read = $this->get_socket_list();
		$temp = socket_select($read, $null, $null, 0, 15);
		if (!empty($read)) {
			$this->read_sockets($read);
		}
		$db->reconnection();
		$this->update_DB_records();
		$this->check_games_progress();

		if ($this->soft_shutdown && $this->active_games == 0) {
			$this->server_running = false;
			echo "soft shutdown complete\n";
		}
	}

	$this->stop_socket();

	echo "Server shut down\n";
}}        $server = new gameserver();

3 Cevap

İki şey, ilk,% 97 cpu kullanmayın emin olmak için, size döngü içinde en az bir kez uyku sağlamak.

Herhangi bir veritabanı aktivite varsa İkincisi, ben buldum bir hile sorgunun sonucunu saklamak için kullanılan bellek boşaltmak için mysql_free_result (ya da 'diğer DBMS için eşdeğerdir) aramak için, olduğunu.

Eğer CRON gelen hiç bitmeyen programları başlangıç ​​mı? Cron belirtmek ve birkaç çalışan programlar aynı şeyi yapıyor bitireceğiz takvime göre yeni bir örneğini başlayacak .. bu sorun olabilir mi?

Ben Bunu Cron her dakika kullanarak yeni bir örneğini olmadığını varsayarak, ve her sonsuz bir döngü çalıştırmak yaşıyorum:

XDebug muhtemelen en iyi bahistir. Bunun dışında, size memory_get_usage() kullanmak ve döngü belirli noktalarında bellek kullanımını giriş yapabilirsiniz.

Sadece script verileri toplamaktadır ve her ilmeğin ucunda düzgün temizlemek olmadığını olabilir mi?