计时器类

为了测量延迟,我们需要使用计时功能,为此我们把相关的功能封装进计时器类内,简化使用

这段代码位于logger.hpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ScopedTimer
{
public:
ScopedTimer(const std::string&name)
:_name(name),_start(std::chrono::high_resolution_clock::now())
{
_prev = _start;
}

int64_t staged()
{
auto stage = std::chrono::high_resolution_clock::now();
auto ret = stage - _prev;
_prev = stage;
return (std::chrono::duration_cast<std::chrono::microseconds>(ret)).count();
}

~ScopedTimer() {
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end-_start);
LOG_DEBUG("计时器 {} 存活时间: {} μs",_name,duration.count());
}

private:
std::string _name;
std::chrono::time_point<std::chrono::high_resolution_clock> _start;
std::chrono::time_point<std::chrono::high_resolution_clock> _prev;
};
}

检查无缓存时的延迟分布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[default-logger][08:41:39][8][info    ][HTTPServer.cpp:75] 收到HTTP请求, method=GET,path=/flush/redis
[default-logger][08:41:50][9][debug ][HTTPServer.cpp:68] 收到HTTP请求, method=GET,path=/ping
/ping
[default-logger][08:41:55][10][debug ][HTTPServer.cpp:888] 收到HTTP请求, method=POST,path=/debug/merchant/dish/info
[default-logger][08:41:55][10][trace ][HTTPServer.cpp:899] Json解析完成, 耗时 1168μs
[default-logger][08:41:55][10][trace ][HTTPServer.cpp:914] 完成Redis的get查询, 耗时 1068μs
[default-logger][08:41:55][10][trace ][DatabaseClient.cpp:355] API数据库接口加锁耗时: 0μs
[default-logger][08:41:55][10][debug ][DatabaseClient.cpp:356] 数据库查询菜品, ID:D561d2f6d155a
[default-logger][08:41:56][10][trace ][DatabaseClient.cpp:362] API生成SQL语句,耗时 29678μs
[default-logger][08:41:56][10][trace ][DatabaseClient.cpp:364] API执行SQL语句,耗时 10400μs
[default-logger][08:41:56][10][debug ][logger.hpp:40] 计时器 数据库接口内部 存活时间: 40230 μs
[default-logger][08:41:56][10][trace ][HTTPServer.cpp:920] 完成数据库查询数据,耗时 40254μs
[default-logger][08:41:56][10][trace ][HTTPServer.cpp:926] 完成Redis设置缓存,耗时 561μs
[default-logger][08:41:56][10][trace ][HTTPServer.cpp:931] 完成Json序列化和报文写入,耗时 1007μs
[default-logger][08:41:56][10][info ][HTTPServer.cpp:933] [商家查询菜品详情]成功
[default-logger][08:41:56][10][debug ][logger.hpp:40] 计时器 菜品详情查询 存活时间: 44240 μs
1
2
3
4
5
6
[default-logger][08:57:52][10][debug   ][HTTPServer.cpp:888] 收到HTTP请求, method=POST,path=/debug/merchant/dish/info
[default-logger][08:57:52][10][trace ][HTTPServer.cpp:899] Json解析完成, 耗时 83μs
[default-logger][08:57:52][10][trace ][HTTPServer.cpp:914] 完成Redis的get查询, 耗时 2819μs
[default-logger][08:57:52][10][trace ][HTTPServer.cpp:931] 完成Json序列化和报文写入,耗时 143μs
[default-logger][08:57:52][10][info ][HTTPServer.cpp:933] [商家查询菜品详情]成功
[default-logger][08:57:52][10][debug ][logger.hpp:40] 计时器 菜品详情查询 存活时间: 3149 μs