通过PHP监控TCP/IP端口消耗
所以我在Azure Web应用程序上运行PHP。最近,我遇到了服务器TCP/IP端口耗尽的问题,因为我没有使用到Redis缓存的持久连接。我不认为这个问题会再次出现,但由于我没有任何可用的指标(而且我不能远程访问Azure Web应用程序),我想知道PHP中是否有任何函数允许我查看服务器当前使用的所有TCP端口的信息,以便我可以记录这些信息进行诊断通过PHP监控TCP/IP端口消耗,php,sockets,tcp,ports,diagnostics,Php,Sockets,Tcp,Ports,Diagnostics,所以我在Azure Web应用程序上运行PHP。最近,我遇到了服务器TCP/IP端口耗尽的问题,因为我没有使用到Redis缓存的持久连接。我不认为这个问题会再次出现,但由于我没有任何可用的指标(而且我不能远程访问Azure Web应用程序),我想知道PHP中是否有任何函数允许我查看服务器当前使用的所有TCP端口的信息,以便我可以记录这些信息进行诊断 有人对如何实现这一目标有什么想法吗?我最初的想法是,我需要使用shell_exec。不幸的是,我无法在Azure Web App上实现这一点,但我认
有人对如何实现这一目标有什么想法吗?我最初的想法是,我需要使用shell_exec。不幸的是,我无法在Azure Web App上实现这一点,但我认为这在其他情况下也可以实现,即您运行自己的服务器
class netstat {
public $PortsInUse = 0;
public $AvailablePorts = 0;
public $TotalPorts = 0;
public $Ports = array();
public function __construct () {
$p = popen('netsh int ipv4 show dynamicport tcp', 'r');
$this->TotalPorts = rtrim(trim(explode("Number of Ports : ", stream_get_contents($p))[1]));
pclose($p);
$netstat = popen('netstat -no', 'r');
$log = stream_get_contents($netstat);
pclose($netstat);
$this->Ports = array_slice(explode("\n", $log), 4);
array_pop($this->Ports);
foreach($this->Ports as &$port) {
$port = explode(" ", $port);
foreach($port as $k => $p) {
if (empty($p))
unset($port[$k]);
}
$port = array_values($port);
$port = (object)array(
"LocalAddress" => $port[0],
"ForeignAddress" => $port[1],
"Status" => $port[2],
"ProcessId" => $port[3]
);
}
$this->PortsInUse = count($this->Ports);
$this->AvailablePorts = $this->TotalPorts - count($this->Ports);
}
}
上述对象将能够显示当前正在使用的TCP端口数,以及该计算机上可用于TCP的动态端口总数。它还包含一个“Ports”数组,其中包含有关每个正在使用的端口的信息,例如它们的本地和外部地址、状态和PID(进程id)