abstract class AbstractSome
{
public function trigger($event)
{
if ($event && method_exists($this, $event)) {
return $this->"on".$event();
}
}
}
// Тот объект что мы будем тестировать
class Magic
{
public function some (AbstractSome $some)
{
return $some->trigger('magic');
}
}
class MagicTest extends phphunittestcase
{
public function someTest()
{
$magic = new Magic;
$some = $this->getMockForAbstractClass(AbstractSome::class);
$some->method('trigger')
->willReturn('olololo');
$result = $magic->some($some);
$this->assertSame('olololo', $result);
}
}
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "<proto ver="1.0"/>");
// или так fwrite($fp, "<proto ver="1.0"/>\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
оборудование в вашей сети в основном стучиться на старый сервер и его обработкой занимается старый сервер, поэтому надо мерить не только по пользователям но и по хостам откуда приходит информация от клиентов, это во первых.
во вторых я бы использовал php-fpm вместо apache+mod_php (это чисто имхо, но совсем не обязательно уверен что apache+mod_php тоже настроить можно просто я чаще настрайваю php-fpm).
в третих в php могут быть установленны всякие xdebug или не включены opcache что может вызывать нагрузку на cpu поэтому не плохо phpinfo приложить по текущему, а также сравнить его с тем где запускали и проблем не было.
в четвертых надо посмотреть сколько rps приходит на балансировщик (nginx) и сколько он прокидывает дальше в backend и нужно понять процессы может быть плодятся кривым скриптом или это реальная нагрузка на сервер
в пятых я бы просто в nginx сделал бы upstream и добавил бы 2 сервера если нагрузка в целом стихла, значит просто ваш сервер не справлялся с ней, если оба сервера стали тормозить значит они не справляются(и тут надо или еще втыкать серваки или уменьшать нагрузку, собирать по реже данные например), если тормозит все тот же сервер а другой работает без проблем то проблема в сервере, после добавления серверов и round robin балансировки нагрузка на двух серверах должна стать примерно одинаковой.
в 6 возможно косяк в коде и где то бесконечный цикл надо понять воркеры зависают или просто большое количество клиентов
в 7 на серверах бд и на других серверах надо мониторить io (ввод/вывод) потому что обычно тормоза идут именно от туда, а не только cpu и ram
я бы начал с 3 пункта, потом 5 а потом по вкусу.