Php显示97%的CPU使用率

Php显示97%的CPU使用率,php,Php,我有一个使用flash和php开发的游戏网站。php代码包含4000行,将作为cron运行。在代码内部,有一个while循环,它将无限运行,以检查套接字中写入的任何数据,并相应地调用不同的函数,并将结果发送回套接字。从flash中,它将获得结果并显示出来 我面临的问题是,从php代码的某个地方来看,它是内存泄漏。因为它很大,我无法从哪里找到它发生的地方。此外,它只能作为cron运行。是否有任何工具可以找出内存泄漏?我听说过xdebug,但我没有使用它。还有别的吗 check.php(作为cron

我有一个使用flash和php开发的游戏网站。php代码包含4000行,将作为cron运行。在代码内部,有一个while循环,它将无限运行,以检查套接字中写入的任何数据,并相应地调用不同的函数,并将结果发送回套接字。从flash中,它将获得结果并显示出来

我面临的问题是,从php代码的某个地方来看,它是内存泄漏。因为它很大,我无法从哪里找到它发生的地方。此外,它只能作为cron运行。是否有任何工具可以找出内存泄漏?我听说过xdebug,但我没有使用它。还有别的吗

check.php(作为cron)

php(仅部分)


您是否正在从CRON启动永无止境的程序?Cron将根据您指定的时间表启动一个新实例,最终会有几个正在运行的程序执行相同的操作。。这可能是您的问题吗?

我假设您不是每分钟都使用cron启动一个新实例,并让每个实例运行一个无限循环:

XDebug可能是您最好的选择。除此之外,您还可以在循环的特定点使用和记录内存使用情况


可能仅仅是因为您的脚本积累了数据,并且没有在每个循环结束时正确地清理数据

两件事,首先,确保在循环中至少睡眠一次,以确保不使用97%的cpu


其次,我发现的一个技巧是,如果有任何数据库活动,调用mysql_free_result(或其他DBMS的等价物),以释放用于存储查询结果的内存。

这完全有道理。。。是否看起来像*****如果是这样,您将尝试每分钟运行该cron,每次调用一个infinate循环!不我相信这只会发生一次。。请看一看我的代码张贴一些您的代码将是有益的;否则,这主要是一个猜测游戏。CPU使用率?内存泄漏?是哪一个?在问题中发布代码会稍微有帮助。不。。我相信这只会发生一次。。。是的,它可能正在某个地方积累数据,但要从4000行中找到它是很困难的。。即使下面的程序显示了97%的CPU使用率(如果从命令提示符运行)。。有没有办法经常释放CPU使用率?可能值得一提。我在循环中添加了睡眠(1),所以现在它没有使用97%的CPU。希望以后不会出现其他瓶颈问题。。谢谢你的回复。你可能想考虑你的客户多久轮询你的服务器,以及你是否可以调整你的睡眠量,以进一步减少运行你的脚本所花的时间。
$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";}
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();