Служба веб-сокетов на основе Swoole, третья статья в предыдущей серии о системе сообщений, в основном знакомит с содержанием стресс-тестирования веб-сокетов. Ядро программирования — это математика, а суть тестирования — расчет. Профессиональный термин называется оценкой мощности. Тест обычно используется для моделирования программы и проверки правильности работы программы. Есть два момента, на которые необходимо обратить внимание: оптимальное значение QPS и максимальное значение, полученное на основе отзывов системы. тестовые данные, оптимизация тестовых явлений и отражений.
Когда вся разработка готова, начните готовиться к выходу в Интернет: тестированию и развертыванию сервиса. При тестировании следует обратить внимание на строгую логику кода, корректность работы кода и стабильность работы сервиса. данные как индикаторы. Компьютерное программирование – это, в конечном счете, вся математика.
Группа потоков, поставляемая с jmeter, очень проста. Поток представляет пользователя vuser, поэтому, если нам нужно количество одновременных пользователей, мы можем установить количество потоков. Период нарастания: я понимаю, сколько времени потребуется, чтобы увеличить количество пользователей vuser с 0 до указанного вами количества пользователей vuser. Как видно из этих параметров, все очень просто. Но вы не можете установить время для теста, что не особо важно. Но, к счастью, у нас есть плагины jmeter, и поставляемая с ними группа потоков добавляет эту функцию.
Number of Threads(users) //Количество одновременных потоков (пользователей)
Loop Count //Количество повторений
Щелкните правой кнопкой мыши в левом дереве навигации. Test Plan,выбирать Add > Threads(Users) > Thread Group , щелкните правой кнопкой мыши Thread Group,выбирать Add > Сэмплер, вы можете увидеть следующие новые параметры сэмплера, подробности следующие.
WebSocket Open Connection // создать WebSocket соединять
WebSocket Ping/Pong // контрольный кадр, отправить ping и получить pong
WebSocket request-response Sampler // Отправлять и получать текстовые или двоичные файлы WebSocket рамка
WebSocket Single Write Sampler // Отправить текстовый или двоичный файл WebSocket рамка
WebSocket Single Read Sampler // Получить текстовый или двоичный файл WebSocket рамка
WebSocket Close // закрытие Websocket соединять
Добавьте агрегированный отчет и выполните тест. Результаты показаны ниже.
1. Случайным образом прочитайте 1000 пользователей в таблице пользователей и проведите стресс-тест.
select user_id from user where user_status = 1
ORDER BY RAND() limit 1000;
2. Создайте данные, необходимые для тестирования (например, 100 000 элементов).
drop procedure idata;
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i<=100000 )do
insert into t2 values(i, i, i);
set i=i+1;
end while;
end;;
delimiter ;
call idata();
3. Запросите команду максимального количества ссылок.
show variables like '%max_connections%';
4. Запросите команду состояния потока связи.
show processlist;
5. Команда для определения статуса связи сервера Mysql.
netstat -ant|grep ESTABLISHED|grep 3306 | wc -l
Основное соображение для демо-интерфейса запроса заключается в том, что доступ пользователей является произвольным. При моделировании данных старайтесь быть как можно ближе к реальной сцене. Код выглядит следующим образом:
$str = '62210,45783,36209,146502,24599,168338,166511,1917...';
$uidTestArr = explode(',',$str);
foreach ($uidTestArr as $uid){
if(isset($uid) && intval($uid) > 0){
$json = file_get_contents('http://open.stark.com/login/gettoken?uid='. $uid);
$json = json_decode($json,true);
$temp[] = [ 'uid' => $uid , 'token' => $json['token'] ];
}
}
$index = rand(0,count($temp) - 1);
$randData = $temp[$index];
//Результаты случайного выполнения
/**
Array
(
[uid] => 166511
[token] => f46540f11a40afeb9998cbe76661ec8234a87054
)
*/
Демо-версия тестового кода Crontab: сначала заполните тестовые данные, учтите фактическую пропускную способность Crontab, оптимизируйте интервал выполнения запланированной задачи, используйте Curl иshell_exec для реализации, выполните результат и верните данные {"code":200, "result": [],"msg":"ОК"}
$str = "62210,45783,36209,146502,24599,168338,166511,1917,135799,8326...";
//Удалим возможные разрывы строк и пробелы
$str = str_replace(array(PHP_EOL, ' ' ,'',$str));
$testUsers = explode(',',$str);
for ($i=0;$i<10000;$i++){
$index = rand(0,99);
$uid = $testUsers[$index];
$msg = '{\"rid\":225,\"uid\":'.$uid.',\"top_rid\":225,\"module\":\"novel_chapter\",\"module_name\":\"1022 last dance \u7b2c13\u7ae0\",\"module_id\":1019712,\"module_nid\":163961,\"comment_uid\":268,\"comment_nickname\":\"\u6d4b\u8bd5\u5c0f\u5b9d\u8d1d\",\"content\":\"\u4f60\u597d\u554a\",\"gift_id\":0,\"gift_name\":\"\",\"gift_number\":0}';
$url = 'http://msgdev.stark.com/api/comment/message';
$json = shell_exec( "curl -d 'uid={$uid}&msg={$msg}' {$url} " );
echo 'i:'.$i.',json:'.$json.PHP_EOL;
}
При временном выполнении или остановке запланированной задачи добавьте временную метку в миллисекундах перед выполнением. Вы можете распечатать код для трудоемких вычислений. Код выглядит следующим образом:
//Вернем текущую метку времени в миллисекундах
функция мсектайм() {
$stamptime = микровремя();
$arr = взорваться(' ',$stamptime);
$msectime = sprintf('%.0f', (floatval($arr[0]) + floatval($arr[1])) * 1000);
вернуть $мсектиме;
}
Особое примечание к пункту 5: необходимо подчеркнуть одну вещь: не пугайтесь так называемых 1 или 10 миллионов заголовков трафика. Например, при посещении 1000 Вт/ч Qps становится 27777/с. популярные интерфейсы, запрошенные каждым пользователем 30, это правда теста. Используйте базу данных в памяти для ускорения в ключевых местах, и препятствия будут легко решены:
10000000 / 60 / 60 / 30 = 925/s