Поэтому я использую PHP в веб-приложении Azure. Недавно я столкнулся с проблемой, когда мой сервер перешел на исчерпание портов TCP / IP, потому что я не использовал постоянные соединения с моим Redis Cache. Я не верю, что проблема возникнет снова, но поскольку у меня нет доступных для этого метрик (и поскольку я не могу просто удаленно войти в веб-приложение Azure), мне было интересно, есть ли в PHP какие-либо функции, позволил бы мне видеть информацию обо всех TCP-портах, используемых в настоящее время сервером, так что я могу записать это для диагностики.
У кого-нибудь есть идеи о том, как это можно сделать? Сначала я думаю, что мне нужно будет использовать 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 на этом компьютере. Он также содержит массив «Порты», который содержит информацию о каждом используемом порте, такую как их локальный и внешний адрес, статус и PID (идентификатор процесса).
Других решений пока нет …