Php nohup进程继续关闭

Php nohup进程继续关闭,php,linux,exec,nohup,Php,Linux,Exec,Nohup,我正在尝试运行10.000个进程来创建星号电话帐户。 这是对我们的星号服务器进行压力测试 我用php调用了exec()函数来创建一个Linux命令 nohup /usr/src/pjproject-2.3/pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu --id=sip:%s@13.113.163.3 --registrar=sip:127.0.0.1:25060 --realm=* --username=%s --password=123456 --

我正在尝试运行10.000个进程来创建星号电话帐户。 这是对我们的星号服务器进行压力测试

我用php调用了exec()函数来创建一个Linux命令

nohup /usr/src/pjproject-2.3/pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu --id=sip:%s@13.113.163.3 --registrar=sip:127.0.0.1:25060 --realm=* --username=%s --password=123456 --local-port=%s --null-audio --no-vad --max-calls=32 --no-tcp >>/dev/null 2>>/dev/null & $(echo -ne \'\r\')"
一切都很完美,剧本完全符合我的期望。 但下一个问题也来了;在创建了10000个帐户之后,进程突然全部停止

这是为什么?

nohup函数不是让进程保持活力吗? 在调用nohup函数之后,我也在调用disown函数

谢谢你的帮助

[编辑] 我还尝试了这个项目的功能屏幕,屏幕功能的工作就像一个魅力,但问题是cpu的使用。为了创建10000个屏幕,让linux服务器变得疯狂,这就是我选择nohup的原因

完整的php代码:

<?php

# count
$count_screens = 0;

# port count start
$port_count = 30000; 

# register accounts number
$ext_number = 1000; 

# amount of times you want this loop to go
$min_accounts = 0;    
$max_accounts = 1000;          

Class shell {   

    const CREATE_SESSION  =    'screen -dmS stress[%s]';     
    const RUN_PJSUA       =    'screen -S stress[%s] -p 0 -rX stuff "nohup /usr/src/pjproject-2.3/pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu --id=sip:%s@13.113.163.3 --registrar=sip:127.0.0.1:25060 --realm=* --username=%s --password=123456 --local-port=%s --null-audio --no-vad --max-calls=32 --no-tcp >>/dev/null 2>>/dev/null &"';     
    const DISOWN_PJSUA    =    'screen -S stress[%s] -p 0 -rX stuff "disown -l $(echo -ne \'\r\')"';   

    public function openShell($count_screens) {   

        # creating a new screen to make the second call

        $command = sprintf(static:: CREATE_SESSION, $count_screens);  
        $string  = exec($command); 
        return var_dump($string);     

    } 

    public function runPJSUA($count_screens, $ext_number, $ext_number, $port_count) {  

        # register a new pjsua client 

        $command = sprintf(static:: RUN_PJSUA, $count_screens, $ext_number, $ext_number, $port_count);
        $string  = exec($command);  
        usleep(20000);  
        return var_dump($string); 

    }

    public function disownPJSUA($count_screens) {  

        # register a new pjsua client 

        $command = sprintf(static:: DISOWN_PJSUA, $count_screens); 
        $string  = exec($command);    
        return var_dump($string); 

    }

}  

while ($min_accounts < $max_accounts) {

    $shell = new shell(); 

    if ($count_screens == '0') {
        $count_screens++;
        echo $shell->openShell($count_screens); 
    } else {
        $count_screens = 1;
    }

    $port_count++; 
    $ext_number++; 
    $min_accounts++;  

    echo $shell->runPJSUA($count_screens, $ext_number, $ext_number, $port_count);
    echo $shell->disownPJSUA($count_screens);  

}

Pjsua是一个相对较重的应用程序,显然太重了,无法运行10000个实例,不适用于此类测试。当您为32个呼叫配置它时,即使端口用尽也会是一个问题(每个呼叫有两个保留端口加上SIP端口)。若您想继续使用pjsua,至少可以通过为单个pjsua实例配置多个帐户来优化测试。它可能会受到命令行长度的限制,但每个实例大约30个帐户可能会起作用。

包括用于执行所述命令行和取消流程的PHP代码肯定会让事情更清楚。使用完整的PHP代码编辑了问题我发现,首先我尝试了不同的屏幕,但这需要占用大量内存和CPU。现在我在后台尝试了不同的过程。它工作正常,几乎100%注册,但在完成脚本后,它关闭后台进程。我现在不在办公室,所以我无法检查,但我想我找到了解决办法。显然,pjsua有一个服务器空闲时间函数,可以在10分钟后杀死不活动的帐户。我认为这就是问题所在。Pjsua没有任何此类计时器。我们的客户确实需要查看10000个帐户,如果它不起作用,我们可能会找到另一个像pjaua这样的客户;得到任何建议:)SIPp更适合于重SIP测试。另外,请注意,没有任何工具可以完美地模拟现实生活中的情况。例如,我曾经遇到过ARP路由内存池耗尽的问题,而SIPp可以模拟10k SIP注册、延迟、消息重新排序、不正确的身份验证-它无法触发此问题。感谢您的输入。我将在周一测试更多的东西,如果这不起作用,它将成为SIPp。再次感谢:)