了解简单 Laravel 应用程序上的 JMeter 结果
Understanding JMeter results on simple Laravel application
我正在努力理解 Jmeter 的负载测试结果。
我想了解普通 Laravel 应用程序可以处理多少负载。我在普通 Laravel 8 上设置了简单的端点并尝试了不同的 AWS EC2 实例(t3.medium、t3.xlarge、负载平衡设置等)。
我们使用了以下路由来强制增加响应时间:
Route::get('/r0', function (Request $request) {
$data = [
'name' => 'test_name',
'image' => 'imageURL',
'translations' => [
'en' => 'test_english',
'te' => 'పంచాయతి సెక్రటరి',
],
];
return
response()->json($data, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE);
});
Route::get('/r1', function (Request $request) {
sleep(2);
$data = [
'name' => 'test_name',
'image' => 'imageURL',
'translations' => [
'en' => 'test_english',
'te' => 'పంచాయతి సెక్రటరి',
],
];
return
response()->json($data, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE);
});
Route::get('/r2', function (Request $request) {
sleep(10);
$data = [
'name' => 'test_name',
'image' => 'imageURL',
'translations' => [
'en' => 'test_english',
'te' => 'పంచాయతి సెక్రటరి',
],
];
return
response()->json($data, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE);
});
我记录了从“图表结果”中获得的吞吐量和偏差以及从“综合报告”中获得的其他详细信息在 Jmeter 上用于不同的端点。
这是其中一个设置中 r1 的示例结果:
根据以上image/table,以下是我想要回答的一些问题:
服务器可以为这个端点处理多少负载?是偏差高于吞吐量的点(如互联网上的一些博客文章所述)还是误差百分比不为零?
如何定义服务器可以处理的最大负载或容量?它可以是任何时候像 200 个用户这样的绝对数字吗?
对于某些端点,服务器在一定负载后完全停止响应。在进行进一步测试之前,我必须重新启动服务器。为什么会这样?
您的 table 没有说明有多少线程处于活动状态以及线程数、吞吐量、响应时间、错误等之间的关系是什么的完整故事。我宁愿建议生成 HTML Reporting Dashboard,它比汇总数字
提供更多信息
通常我会寻找 saturation point - 最大系统性能点,例如:
- 从 1 个虚拟用户开始
- 逐渐增加负载观察即Transactions per Second chart。在运行良好的系统上,吞吐量(每秒事务数)的增长幅度应与虚拟用户数的增长幅度相同,即您将负载增加两倍——吞吐量应该高出两倍。响应时间应该大致相等
- 在某些时候,您会发现吞吐量下降而响应时间增加。如果您在这一刻之前查看 Active Threads Over Time 图表 - 您会看到在此阶段有多少虚拟用户在线 - 这就是您正在寻找的数字
- 您可以继续增加负载以查看错误何时开始出现或应用程序何时终止
我认为第一点提供了答案
可能的原因有很多,最common/obvious是:
服务器缺少 CPU、RAM、网络等基本资源,可以使用 JMeter PerfMon Plugin
检查
服务器未针对高负载进行正确配置,请参阅 12 Tips for Laravel Performance Optimization in 2020 调整调整示例指南
检查您的应用程序和操作系统日志,可能是由于消耗了前面提到的资源而终止的情况,例如 OOM Killer
我正在努力理解 Jmeter 的负载测试结果。
我想了解普通 Laravel 应用程序可以处理多少负载。我在普通 Laravel 8 上设置了简单的端点并尝试了不同的 AWS EC2 实例(t3.medium、t3.xlarge、负载平衡设置等)。
我们使用了以下路由来强制增加响应时间:
Route::get('/r0', function (Request $request) {
$data = [
'name' => 'test_name',
'image' => 'imageURL',
'translations' => [
'en' => 'test_english',
'te' => 'పంచాయతి సెక్రటరి',
],
];
return
response()->json($data, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE);
});
Route::get('/r1', function (Request $request) {
sleep(2);
$data = [
'name' => 'test_name',
'image' => 'imageURL',
'translations' => [
'en' => 'test_english',
'te' => 'పంచాయతి సెక్రటరి',
],
];
return
response()->json($data, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE);
});
Route::get('/r2', function (Request $request) {
sleep(10);
$data = [
'name' => 'test_name',
'image' => 'imageURL',
'translations' => [
'en' => 'test_english',
'te' => 'పంచాయతి సెక్రటరి',
],
];
return
response()->json($data, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE);
});
我记录了从“图表结果”中获得的吞吐量和偏差以及从“综合报告”中获得的其他详细信息在 Jmeter 上用于不同的端点。
这是其中一个设置中 r1 的示例结果:
根据以上image/table,以下是我想要回答的一些问题:
服务器可以为这个端点处理多少负载?是偏差高于吞吐量的点(如互联网上的一些博客文章所述)还是误差百分比不为零?
如何定义服务器可以处理的最大负载或容量?它可以是任何时候像 200 个用户这样的绝对数字吗?
对于某些端点,服务器在一定负载后完全停止响应。在进行进一步测试之前,我必须重新启动服务器。为什么会这样?
您的 table 没有说明有多少线程处于活动状态以及线程数、吞吐量、响应时间、错误等之间的关系是什么的完整故事。我宁愿建议生成 HTML Reporting Dashboard,它比汇总数字
提供更多信息通常我会寻找 saturation point - 最大系统性能点,例如:
- 从 1 个虚拟用户开始
- 逐渐增加负载观察即Transactions per Second chart。在运行良好的系统上,吞吐量(每秒事务数)的增长幅度应与虚拟用户数的增长幅度相同,即您将负载增加两倍——吞吐量应该高出两倍。响应时间应该大致相等
- 在某些时候,您会发现吞吐量下降而响应时间增加。如果您在这一刻之前查看 Active Threads Over Time 图表 - 您会看到在此阶段有多少虚拟用户在线 - 这就是您正在寻找的数字
- 您可以继续增加负载以查看错误何时开始出现或应用程序何时终止
我认为第一点提供了答案
可能的原因有很多,最common/obvious是:
服务器缺少 CPU、RAM、网络等基本资源,可以使用 JMeter PerfMon Plugin
检查服务器未针对高负载进行正确配置,请参阅 12 Tips for Laravel Performance Optimization in 2020 调整调整示例指南
检查您的应用程序和操作系统日志,可能是由于消耗了前面提到的资源而终止的情况,例如 OOM Killer