[{"data":1,"prerenderedAt":1779},["ShallowReactive",2],{"content:\u002F2026\u002F05\u002Fwrk":3,"surround:\u002F2026\u002F05\u002Fwrk":1768},{"id":4,"title":5,"body":6,"categories":1745,"date":1747,"description":1748,"draft":1749,"extension":1750,"image":1751,"meta":1752,"navigation":1754,"path":1755,"permalink":1751,"published":1751,"readingTime":1756,"recommend":1751,"references":1751,"seo":1761,"sitemap":1762,"stem":1763,"tags":1764,"type":1765,"updated":1766,"__hash__":1767},"content\u002Fposts\u002F2026\u002F05\u002Fwrk.md","wrk HTTP 压测工具使用与指标分析",{"type":7,"value":8,"toc":1731},"minimark",[9,13,39,42,503,510,516,522,528,534,537,559,562,579,582,740,745,753,759,765,771,777,786,792,795,798,801,805,812,815,818,847,850,853,873,876,884,886,899,904,912,1128,1131,1186,1189,1289,1335,1338,1341,1447,1450,1510,1517,1520,1714,1721,1724,1727],[10,11,12],"h2",{"id":12},"安装",[14,15,20],"pre",{"className":16,"code":17,"language":18,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","brew install wrk\n","bash","",[21,22,23],"code",{"__ignoreMap":19},[24,25,28,32,36],"span",{"class":26,"data-line":27,"line":27},"line",1,[24,29,31],{"class":30},"sScJk","brew",[24,33,35],{"class":34},"sZZnC"," install",[24,37,38],{"class":34}," wrk\n",[10,40,41],{"id":41},"压测参数",[14,43,45],{"className":16,"code":44,"language":18,"meta":19,"style":19},"pzj@pzjmac ~ % wrk\nUsage: wrk \u003Coptions> \u003Curl>                            \n  Options:                                            \n    -c, --connections \u003CN>  Connections to keep open   \n    -d, --duration    \u003CT>  Duration of test           \n    -t, --threads     \u003CN>  Number of threads to use   \n                                                      \n    -s, --script      \u003CS>  Load Lua script file       \n    -H, --header      \u003CH>  Add header to request      \n        --latency          Print latency statistics   \n        --timeout     \u003CT>  Socket\u002Frequest timeout     \n    -v, --version          Print version details      \n                                                      \n  Numeric arguments may include a SI unit (1k, 1M, 1G)\n  Time arguments may include a time unit (2s, 2m, 2h)\n",[21,46,47,60,101,114,151,183,218,251,287,321,342,369,390,423,467],{"__ignoreMap":19},[24,48,49,52,55,58],{"class":26,"data-line":27,"line":27},[24,50,51],{"class":30},"pzj@pzjmac",[24,53,54],{"class":34}," ~",[24,56,57],{"class":34}," %",[24,59,38],{"class":34},[24,61,63,66,69,73,76,79,83,86,88,90,93,96,98],{"class":26,"data-line":62,"line":62},2,[24,64,65],{"class":30},"Usage:",[24,67,68],{"class":34}," wrk",[24,70,72],{"class":71},"szBVR"," ",[24,74,75],{"class":71},"\u003C",[24,77,78],{"class":34},"option",[24,80,82],{"class":81},"sVt8B","s",[24,84,85],{"class":71},">",[24,87,72],{"class":71},[24,89,75],{"class":71},[24,91,92],{"class":34},"ur",[24,94,95],{"class":81},"l",[24,97,85],{"class":71},[24,99,100],{"class":81},"                            \n",[24,102,104,108,111],{"class":26,"data-line":103,"line":103},3,[24,105,107],{"class":106},"indent","  ",[24,109,110],{"class":30},"Options:",[24,112,113],{"class":81},"                                            \n",[24,115,117,120,123,127,129,131,134,136,139,142,145,148],{"class":26,"data-line":116,"line":116},4,[24,118,119],{"class":106},"    ",[24,121,122],{"class":30},"-c,",[24,124,126],{"class":125},"sj4cs"," --connections",[24,128,72],{"class":71},[24,130,75],{"class":71},[24,132,133],{"class":81},"N",[24,135,85],{"class":71},[24,137,138],{"class":34},"  Connections",[24,140,141],{"class":34}," to",[24,143,144],{"class":34}," keep",[24,146,147],{"class":34}," open",[24,149,150],{"class":81},"   \n",[24,152,154,156,159,162,164,166,169,171,174,177,180],{"class":26,"data-line":153,"line":153},5,[24,155,119],{"class":106},[24,157,158],{"class":30},"-d,",[24,160,161],{"class":125}," --duration",[24,163,119],{"class":71},[24,165,75],{"class":71},[24,167,168],{"class":81},"T",[24,170,85],{"class":71},[24,172,173],{"class":34},"  Duration",[24,175,176],{"class":34}," of",[24,178,179],{"class":34}," test",[24,181,182],{"class":81},"           \n",[24,184,186,188,191,194,197,199,201,203,206,208,211,213,216],{"class":26,"data-line":185,"line":185},6,[24,187,119],{"class":106},[24,189,190],{"class":30},"-t,",[24,192,193],{"class":125}," --threads",[24,195,196],{"class":71},"     ",[24,198,75],{"class":71},[24,200,133],{"class":81},[24,202,85],{"class":71},[24,204,205],{"class":34},"  Number",[24,207,176],{"class":34},[24,209,210],{"class":34}," threads",[24,212,141],{"class":34},[24,214,215],{"class":34}," use",[24,217,150],{"class":81},[24,219,221,223,225,227,229,231,233,235,237,239,241,243,245,247,249],{"class":26,"data-line":220,"line":220},7,[24,222,119],{"class":106},[24,224,119],{"class":106},[24,226,119],{"class":106},[24,228,119],{"class":106},[24,230,119],{"class":106},[24,232,119],{"class":106},[24,234,119],{"class":106},[24,236,119],{"class":106},[24,238,119],{"class":106},[24,240,119],{"class":106},[24,242,119],{"class":106},[24,244,119],{"class":106},[24,246,119],{"class":106},[24,248,107],{"class":106},[24,250],{"class":81},[24,252,254,256,259,262,265,267,270,272,275,278,281,284],{"class":26,"data-line":253,"line":253},8,[24,255,119],{"class":106},[24,257,258],{"class":30},"-s,",[24,260,261],{"class":125}," --script",[24,263,264],{"class":71},"      ",[24,266,75],{"class":71},[24,268,269],{"class":81},"S",[24,271,85],{"class":71},[24,273,274],{"class":34},"  Load",[24,276,277],{"class":34}," Lua",[24,279,280],{"class":34}," script",[24,282,283],{"class":34}," file",[24,285,286],{"class":81},"       \n",[24,288,290,292,295,298,300,302,305,307,310,313,315,318],{"class":26,"data-line":289,"line":289},9,[24,291,119],{"class":106},[24,293,294],{"class":30},"-H,",[24,296,297],{"class":125}," --header",[24,299,264],{"class":71},[24,301,75],{"class":71},[24,303,304],{"class":81},"H",[24,306,85],{"class":71},[24,308,309],{"class":34},"  Add",[24,311,312],{"class":34}," header",[24,314,141],{"class":34},[24,316,317],{"class":34}," request",[24,319,320],{"class":81},"      \n",[24,322,324,326,328,331,334,337,340],{"class":26,"data-line":323,"line":323},10,[24,325,119],{"class":106},[24,327,119],{"class":106},[24,329,330],{"class":30},"--latency",[24,332,333],{"class":34},"          Print",[24,335,336],{"class":34}," latency",[24,338,339],{"class":34}," statistics",[24,341,150],{"class":81},[24,343,345,347,349,352,354,356,358,360,363,366],{"class":26,"data-line":344,"line":344},11,[24,346,119],{"class":106},[24,348,119],{"class":106},[24,350,351],{"class":30},"--timeout",[24,353,196],{"class":71},[24,355,75],{"class":71},[24,357,168],{"class":81},[24,359,85],{"class":71},[24,361,362],{"class":34},"  Socket\u002Frequest",[24,364,365],{"class":34}," timeout",[24,367,368],{"class":81},"     \n",[24,370,372,374,377,380,382,385,388],{"class":26,"data-line":371,"line":371},12,[24,373,119],{"class":106},[24,375,376],{"class":30},"-v,",[24,378,379],{"class":125}," --version",[24,381,333],{"class":34},[24,383,384],{"class":34}," version",[24,386,387],{"class":34}," details",[24,389,320],{"class":81},[24,391,393,395,397,399,401,403,405,407,409,411,413,415,417,419,421],{"class":26,"data-line":392,"line":392},13,[24,394,119],{"class":106},[24,396,119],{"class":106},[24,398,119],{"class":106},[24,400,119],{"class":106},[24,402,119],{"class":106},[24,404,119],{"class":106},[24,406,119],{"class":106},[24,408,119],{"class":106},[24,410,119],{"class":106},[24,412,119],{"class":106},[24,414,119],{"class":106},[24,416,119],{"class":106},[24,418,119],{"class":106},[24,420,107],{"class":106},[24,422],{"class":81},[24,424,426,428,431,434,437,440,443,446,449,451,455,458,461,464],{"class":26,"data-line":425,"line":425},14,[24,427,107],{"class":106},[24,429,430],{"class":30},"Numeric",[24,432,433],{"class":34}," arguments",[24,435,436],{"class":34}," may",[24,438,439],{"class":34}," include",[24,441,442],{"class":34}," a",[24,444,445],{"class":34}," SI",[24,447,448],{"class":34}," unit",[24,450,72],{"class":81},[24,452,454],{"class":453},"sSDpw","(",[24,456,457],{"class":81},"1k, ",[24,459,460],{"class":34},"1M,",[24,462,463],{"class":34}," 1G",[24,465,466],{"class":453},")\n",[24,468,470,472,475,477,479,481,483,486,488,490,492,495,498,501],{"class":26,"data-line":469,"line":469},15,[24,471,107],{"class":106},[24,473,474],{"class":30},"Time",[24,476,433],{"class":34},[24,478,436],{"class":34},[24,480,439],{"class":34},[24,482,442],{"class":34},[24,484,485],{"class":34}," time",[24,487,448],{"class":34},[24,489,72],{"class":81},[24,491,454],{"class":453},[24,493,494],{"class":81},"2s, ",[24,496,497],{"class":34},"2m,",[24,499,500],{"class":34}," 2h",[24,502,466],{"class":453},[504,505,506,509],"p",{},[21,507,508],{"code":508},"-c",": 连接数",[504,511,512,515],{},[21,513,514],{"code":514},"-d",": 压测时长",[504,517,518,521],{},[21,519,520],{"code":520},"-t",": 压测线程数",[504,523,524,527],{},[21,525,526],{"code":526},"-s",": lua 脚本路径",[504,529,530,533],{},[21,531,532],{"code":532},"-h",": 请求头",[10,535,536],{"id":536},"参考示例",[14,538,540],{"className":16,"code":539,"language":18,"meta":19,"style":19},"wrk -c100 -d10s -t10 https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome\n",[21,541,542],{"__ignoreMap":19},[24,543,544,547,550,553,556],{"class":26,"data-line":27,"line":27},[24,545,546],{"class":30},"wrk",[24,548,549],{"class":125}," -c100",[24,551,552],{"class":125}," -d10s",[24,554,555],{"class":125}," -t10",[24,557,558],{"class":34}," https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome\n",[504,560,561],{},"含义：",[504,563,564,565,568,569,575,576],{},"以",[21,566,567],{"code":567},"100 个连接, 10 个线程","对 ",[570,571,572],"a",{"href":572,"rel":573},"https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome",[574],"nofollow"," 这个接口压测 ",[21,577,578],{"code":578},"10s",[10,580,581],{"id":581},"结果分析",[14,583,585],{"className":16,"code":584,"language":18,"meta":19,"style":19},"Running 10s test @ https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome\n  10 threads and 100 connections\n  Thread Stats   Avg      Stdev     Max   +\u002F- Stdev\n    Latency   113.26ms  182.88ms   1.66s    90.13%\n    Req\u002FSec   184.11    122.34   430.00     54.91%\n  16657 requests in 10.07s, 17.72MB read\n  Non-2xx or 3xx responses: 5501\nRequests\u002Fsec:   1654.68\nTransfer\u002Fsec:      1.76MB\n",[21,586,587,602,620,645,664,683,705,724,732],{"__ignoreMap":19},[24,588,589,592,595,597,600],{"class":26,"data-line":27,"line":27},[24,590,591],{"class":30},"Running",[24,593,594],{"class":34}," 10s",[24,596,179],{"class":34},[24,598,599],{"class":34}," @",[24,601,558],{"class":34},[24,603,604,606,609,611,614,617],{"class":26,"data-line":62,"line":62},[24,605,107],{"class":106},[24,607,608],{"class":30},"10",[24,610,210],{"class":34},[24,612,613],{"class":34}," and",[24,615,616],{"class":125}," 100",[24,618,619],{"class":34}," connections\n",[24,621,622,624,627,630,633,636,639,642],{"class":26,"data-line":103,"line":103},[24,623,107],{"class":106},[24,625,626],{"class":30},"Thread",[24,628,629],{"class":34}," Stats",[24,631,632],{"class":34},"   Avg",[24,634,635],{"class":34},"      Stdev",[24,637,638],{"class":34},"     Max",[24,640,641],{"class":34},"   +\u002F-",[24,643,644],{"class":34}," Stdev\n",[24,646,647,649,652,655,658,661],{"class":26,"data-line":116,"line":116},[24,648,119],{"class":106},[24,650,651],{"class":30},"Latency",[24,653,654],{"class":34},"   113.26ms",[24,656,657],{"class":34},"  182.88ms",[24,659,660],{"class":34},"   1.66s",[24,662,663],{"class":34},"    90.13%\n",[24,665,666,668,671,674,677,680],{"class":26,"data-line":153,"line":153},[24,667,119],{"class":106},[24,669,670],{"class":30},"Req\u002FSec",[24,672,673],{"class":125},"   184.11",[24,675,676],{"class":125},"    122.34",[24,678,679],{"class":125},"   430.00",[24,681,682],{"class":34},"     54.91%\n",[24,684,685,687,690,693,696,699,702],{"class":26,"data-line":185,"line":185},[24,686,107],{"class":106},[24,688,689],{"class":30},"16657",[24,691,692],{"class":34}," requests",[24,694,695],{"class":34}," in",[24,697,698],{"class":34}," 10.07s,",[24,700,701],{"class":34}," 17.72MB",[24,703,704],{"class":34}," read\n",[24,706,707,709,712,715,718,721],{"class":26,"data-line":220,"line":220},[24,708,107],{"class":106},[24,710,711],{"class":30},"Non-2xx",[24,713,714],{"class":34}," or",[24,716,717],{"class":34}," 3xx",[24,719,720],{"class":34}," responses:",[24,722,723],{"class":125}," 5501\n",[24,725,726,729],{"class":26,"data-line":253,"line":253},[24,727,728],{"class":30},"Requests\u002Fsec:",[24,730,731],{"class":125},"   1654.68\n",[24,733,734,737],{"class":26,"data-line":289,"line":289},[24,735,736],{"class":30},"Transfer\u002Fsec:",[24,738,739],{"class":34},"      1.76MB\n",[504,741,742,744],{},[21,743,651],{"code":651},": 平均响应时长",[504,746,747,749,750],{},[21,748,670],{"code":670},": 每个线程的",[21,751,752],{"code":752},"QPS",[504,754,755,758],{},[21,756,757],{"code":757},"Avg",": 平均值",[504,760,761,764],{},[21,762,763],{"code":763},"Stdev",": 标准差",[504,766,767,770],{},[21,768,769],{"code":769},"Max",": 最大值",[504,772,773,776],{},[21,774,775],{"code":775},"+\u002F- Stdev",": 有多少比例的请求，落在「平均值 ± 1 个标准差」这个区间内",[504,778,779,782,783],{},[21,780,781],{"code":781},"Requests\u002Fsec",":  压测出来的",[21,784,785],{"code":785},"全局QPS",[504,787,788,791],{},[21,789,790],{"code":790},"Transfer\u002Fsec",": 每秒平均占用带宽大小",[10,793,794],{"id":794},"如何评判一个接口的好坏",[504,796,797],{},"QPS(每秒最多能处理多少个请求，往往反映该接口的吞吐量) 并不是评判一个接口好坏的唯一标准",[504,799,800],{},"主要通过以下几种方式",[802,803,804],"h3",{"id":804},"错误率",[504,806,807,808,811],{},"结果中包含 ",[21,809,810],{"code":810},"Non-2xx or 3xx responses: 5501","，代表非 2xx-3xx 之间的错误，那么就是 4xx-5xx(客户端或者服务端错误)",[504,813,814],{},"5501\u002F16657 = 33%, 错误率约 33%",[504,816,817],{},"评判标准",[819,820,821,829,835,841],"ul",{},[822,823,824,828],"li",{},[825,826,827],"strong",{},"目标","：≈ 0%",[822,830,831,834],{},[825,832,833],{},"可接受","：\u003C 0.1%",[822,836,837,840],{},[825,838,839],{},"危险","：> 1%",[822,842,843,846],{},[825,844,845],{},"不可用","：> 5%",[802,848,849],{"id":849},"尾延迟",[504,851,852],{},"尾延迟通常用这些指标表示：",[819,854,855,861,867],{},[822,856,857,860],{},[825,858,859],{},"P95","：95% 请求比这个快",[822,862,863,866],{},[825,864,865],{},"P99","：99% 请求比这个快",[822,868,869,872],{},[825,870,871],{},"P999","：99.9% 请求比这个快",[504,874,875],{},"举个例子",[14,877,882],{"className":878,"code":880,"language":881,"meta":19},[879],"language-text","P50  = 50ms\nP95  = 200ms\nP99  = 1.5s\n","text",[21,883,880],{"__ignoreMap":19},[504,885,561],{},[819,887,888,891,894],{},[822,889,890],{},"一半请求很快（50ms）",[822,892,893],{},"大部分还行（200ms）",[822,895,896],{},[825,897,898],{},"但有 1% 请求慢到 1.5秒",[504,900,901,902],{},"这个 1.5s 就是典型的",[825,903,849],{},[504,905,906,908,909,911],{},[21,907,546],{"code":546}," 带上 ",[21,910,330],{"code":330}," 可以获取到请求时间的分布",[14,913,915],{"className":16,"code":914,"language":18,"meta":19,"style":19},"pzj@pzjmac ~ % wrk -c100 -d10s -t10 --latency https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome \nRunning 10s test @ https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome\n  10 threads and 100 connections\n  Thread Stats   Avg      Stdev     Max   +\u002F- Stdev\n    Latency   246.60ms  318.68ms   1.98s    87.53%\n    Req\u002FSec    73.05     97.49   444.00     87.07%\n  Latency Distribution\n     50%  113.02ms\n     75%  311.00ms\n     90%  643.50ms\n     99%    1.51s \n  6286 requests in 10.07s, 6.06MB read\n  Non-2xx or 3xx responses: 3286\nRequests\u002Fsec:    624.11\nTransfer\u002Fsec:    615.81KB\n",[21,916,917,942,954,968,986,1004,1022,1031,1043,1055,1067,1081,1099,1114,1121],{"__ignoreMap":19},[24,918,919,921,923,925,927,929,931,933,936,939],{"class":26,"data-line":27,"line":27},[24,920,51],{"class":30},[24,922,54],{"class":34},[24,924,57],{"class":34},[24,926,68],{"class":34},[24,928,549],{"class":125},[24,930,552],{"class":125},[24,932,555],{"class":125},[24,934,935],{"class":125}," --latency",[24,937,938],{"class":34}," https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome",[24,940,941],{"class":81}," \n",[24,943,944,946,948,950,952],{"class":26,"data-line":62,"line":62},[24,945,591],{"class":30},[24,947,594],{"class":34},[24,949,179],{"class":34},[24,951,599],{"class":34},[24,953,558],{"class":34},[24,955,956,958,960,962,964,966],{"class":26,"data-line":103,"line":103},[24,957,107],{"class":106},[24,959,608],{"class":30},[24,961,210],{"class":34},[24,963,613],{"class":34},[24,965,616],{"class":125},[24,967,619],{"class":34},[24,969,970,972,974,976,978,980,982,984],{"class":26,"data-line":116,"line":116},[24,971,107],{"class":106},[24,973,626],{"class":30},[24,975,629],{"class":34},[24,977,632],{"class":34},[24,979,635],{"class":34},[24,981,638],{"class":34},[24,983,641],{"class":34},[24,985,644],{"class":34},[24,987,988,990,992,995,998,1001],{"class":26,"data-line":153,"line":153},[24,989,119],{"class":106},[24,991,651],{"class":30},[24,993,994],{"class":34},"   246.60ms",[24,996,997],{"class":34},"  318.68ms",[24,999,1000],{"class":34},"   1.98s",[24,1002,1003],{"class":34},"    87.53%\n",[24,1005,1006,1008,1010,1013,1016,1019],{"class":26,"data-line":185,"line":185},[24,1007,119],{"class":106},[24,1009,670],{"class":30},[24,1011,1012],{"class":125},"    73.05",[24,1014,1015],{"class":125},"     97.49",[24,1017,1018],{"class":125},"   444.00",[24,1020,1021],{"class":34},"     87.07%\n",[24,1023,1024,1026,1028],{"class":26,"data-line":220,"line":220},[24,1025,107],{"class":106},[24,1027,651],{"class":30},[24,1029,1030],{"class":34}," Distribution\n",[24,1032,1033,1035,1037,1040],{"class":26,"data-line":253,"line":253},[24,1034,119],{"class":106},[24,1036,72],{"class":106},[24,1038,1039],{"class":30},"50%",[24,1041,1042],{"class":34},"  113.02ms\n",[24,1044,1045,1047,1049,1052],{"class":26,"data-line":289,"line":289},[24,1046,119],{"class":106},[24,1048,72],{"class":106},[24,1050,1051],{"class":30},"75%",[24,1053,1054],{"class":34},"  311.00ms\n",[24,1056,1057,1059,1061,1064],{"class":26,"data-line":323,"line":323},[24,1058,119],{"class":106},[24,1060,72],{"class":106},[24,1062,1063],{"class":30},"90%",[24,1065,1066],{"class":34},"  643.50ms\n",[24,1068,1069,1071,1073,1076,1079],{"class":26,"data-line":344,"line":344},[24,1070,119],{"class":106},[24,1072,72],{"class":106},[24,1074,1075],{"class":30},"99%",[24,1077,1078],{"class":34},"    1.51s",[24,1080,941],{"class":81},[24,1082,1083,1085,1088,1090,1092,1094,1097],{"class":26,"data-line":371,"line":371},[24,1084,107],{"class":106},[24,1086,1087],{"class":30},"6286",[24,1089,692],{"class":34},[24,1091,695],{"class":34},[24,1093,698],{"class":34},[24,1095,1096],{"class":34}," 6.06MB",[24,1098,704],{"class":34},[24,1100,1101,1103,1105,1107,1109,1111],{"class":26,"data-line":392,"line":392},[24,1102,107],{"class":106},[24,1104,711],{"class":30},[24,1106,714],{"class":34},[24,1108,717],{"class":34},[24,1110,720],{"class":34},[24,1112,1113],{"class":125}," 3286\n",[24,1115,1116,1118],{"class":26,"data-line":425,"line":425},[24,1117,728],{"class":30},[24,1119,1120],{"class":125},"    624.11\n",[24,1122,1123,1125],{"class":26,"data-line":469,"line":469},[24,1124,736],{"class":30},[24,1126,1127],{"class":34},"    615.81KB\n",[504,1129,1130],{},"业界通用判断标准",[1132,1133,1134,1152],"table",{},[1135,1136,1137],"thead",{},[1138,1139,1140,1144,1147,1149],"tr",{},[1141,1142,1143],"th",{},"指标",[1141,1145,1146],{},"优秀",[1141,1148,833],{},[1141,1150,1151],{},"差",[1153,1154,1155,1171],"tbody",{},[1138,1156,1157,1162,1165,1168],{},[1158,1159,1160],"td",{},[825,1161,859],{},[1158,1163,1164],{},"\u003C 100ms",[1158,1166,1167],{},"\u003C 300ms",[1158,1169,1170],{},"> 500ms",[1138,1172,1173,1177,1180,1183],{},[1158,1174,1175],{},[825,1176,865],{},[1158,1178,1179],{},"\u003C 200ms",[1158,1181,1182],{},"\u003C 1s",[1158,1184,1185],{},"> 1s",[802,1187,1188],{"id":1188},"稳定性",[504,1190,1191,1288],{},[24,1192,1195,1235],{"className":1193},[1194],"katex",[24,1196,1199],{"className":1197},[1198],"katex-mathml",[1200,1201,1203],"math",{"xmlns":1202},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[1204,1205,1206,1230],"semantics",{},[1207,1208,1209,1213,1216,1220,1223,1227],"mrow",{},[1210,1211,1212],"mi",{},"C",[1210,1214,1215],{},"V",[1217,1218,1219],"mo",{},"=",[1210,1221,1222],{},"σ",[1210,1224,1226],{"mathvariant":1225},"normal","\u002F",[1210,1228,1229],{},"μ",[1231,1232,1234],"annotation",{"encoding":1233},"application\u002Fx-tex","CV=σ\u002Fμ",[24,1236,1240,1271],{"className":1237,"ariaHidden":1239},[1238],"katex-html","true",[24,1241,1244,1249,1255,1259,1264,1268],{"className":1242},[1243],"base",[24,1245],{"className":1246,"style":1248},[1247],"strut","height:0.6833em;",[24,1250,1212],{"className":1251,"style":1254},[1252,1253],"mord","mathnormal","margin-right:0.0715em;",[24,1256,1215],{"className":1257,"style":1258},[1252,1253],"margin-right:0.2222em;",[24,1260],{"className":1261,"style":1263},[1262],"mspace","margin-right:0.2778em;",[24,1265,1219],{"className":1266},[1267],"mrel",[24,1269],{"className":1270,"style":1263},[1262],[24,1272,1274,1278,1282,1285],{"className":1273},[1243],[24,1275],{"className":1276,"style":1277},[1247],"height:1em;vertical-align:-0.25em;",[24,1279,1222],{"className":1280,"style":1281},[1252,1253],"margin-right:0.0359em;",[24,1283,1226],{"className":1284},[1252],[24,1286,1229],{"className":1287},[1252,1253],"(标准差\u002F平均值)",[1132,1290,1291,1301],{},[1135,1292,1293],{},[1138,1294,1295,1298],{},[1141,1296,1297],{},"CV",[1141,1299,1300],{},"结论",[1153,1302,1303,1311,1319,1327],{},[1138,1304,1305,1308],{},[1158,1306,1307],{},"\u003C 0.3",[1158,1309,1310],{},"稳定",[1138,1312,1313,1316],{},[1158,1314,1315],{},"0.3~0.5",[1158,1317,1318],{},"有波动",[1138,1320,1321,1324],{},[1158,1322,1323],{},"> 0.5",[1158,1325,1326],{},"不稳定",[1138,1328,1329,1332],{},[1158,1330,1331],{},"> 1",[1158,1333,1334],{},"过载",[802,1336,1337],{"id":1337},"平均延迟",[504,1339,1340],{},"只能作为参考",[1132,1342,1343,1356],{},[1135,1344,1345],{},[1138,1346,1347,1350,1353],{},[1141,1348,1349],{},"延迟（Avg \u002F P50）",[1141,1351,1352],{},"评价",[1141,1354,1355],{},"说明",[1153,1357,1358,1371,1383,1396,1409,1422,1435],{},[1138,1359,1360,1365,1368],{},[1158,1361,1362],{},[825,1363,1364],{},"\u003C 10ms",[1158,1366,1367],{},"极优",[1158,1369,1370],{},"内存级 \u002F 本地缓存",[1138,1372,1373,1378,1380],{},[1158,1374,1375],{},[825,1376,1377],{},"10 ~ 50ms",[1158,1379,1146],{},[1158,1381,1382],{},"高频接口理想状态",[1138,1384,1385,1390,1393],{},[1158,1386,1387],{},[825,1388,1389],{},"50 ~ 100ms",[1158,1391,1392],{},"良好",[1158,1394,1395],{},"常规业务推荐范围",[1138,1397,1398,1403,1406],{},[1158,1399,1400],{},[825,1401,1402],{},"100 ~ 200ms",[1158,1404,1405],{},"一般",[1158,1407,1408],{},"用户开始能感知",[1138,1410,1411,1416,1419],{},[1158,1412,1413],{},[825,1414,1415],{},"200 ~ 500ms",[1158,1417,1418],{},"较差",[1158,1420,1421],{},"明显变慢",[1138,1423,1424,1429,1432],{},[1158,1425,1426],{},[825,1427,1428],{},"500ms ~ 1s",[1158,1430,1431],{},"很差",[1158,1433,1434],{},"用户明显卡顿",[1138,1436,1437,1441,1444],{},[1158,1438,1439],{},[825,1440,1185],{},[1158,1442,1443],{},"不可接受",[1158,1445,1446],{},"必须优化",[802,1448,1449],{"id":1449},"业界通用指标",[14,1451,1453],{"className":16,"code":1452,"language":18,"meta":19,"style":19},"✔ 错误率 ≈ 0\n✔ P99 在可控范围(200ms以下)\n✔ CV \u003C 0.3（稳定）\n✔ QPS 在目标负载下稳定\n",[21,1454,1455,1469,1486,1500],{"__ignoreMap":19},[24,1456,1457,1460,1463,1466],{"class":26,"data-line":27,"line":27},[24,1458,1459],{"class":30},"✔",[24,1461,1462],{"class":34}," 错误率",[24,1464,1465],{"class":34}," ≈",[24,1467,1468],{"class":125}," 0\n",[24,1470,1471,1473,1476,1479,1481,1484],{"class":26,"data-line":62,"line":62},[24,1472,1459],{"class":30},[24,1474,1475],{"class":34}," P99",[24,1477,1478],{"class":34}," 在可控范围",[24,1480,454],{"class":453},[24,1482,1483],{"class":30},"200ms以下",[24,1485,466],{"class":453},[24,1487,1488,1490,1493,1495,1497],{"class":26,"data-line":103,"line":103},[24,1489,1459],{"class":30},[24,1491,1492],{"class":34}," CV",[24,1494,72],{"class":71},[24,1496,75],{"class":71},[24,1498,1499],{"class":34}," 0.3（稳定）\n",[24,1501,1502,1504,1507],{"class":26,"data-line":116,"line":116},[24,1503,1459],{"class":30},[24,1505,1506],{"class":34}," QPS",[24,1508,1509],{"class":34}," 在目标负载下稳定\n",[504,1511,1512,1513,1516],{},"保证上述的同时，选择合适的线程数(与电脑的 CPU 数量有关),渐进式增大 ",[21,1514,1515],{"code":1515},"c","，找到该接口的最大拐点，测出稳定状态下的最大请求数量",[504,1518,1519],{},"在不断调整下",[14,1521,1523],{"className":16,"code":1522,"language":18,"meta":19,"style":19},"pzj@pzjmac ~ % wrk -c18 -d10s -t10 --latency https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome \nRunning 10s test @ https:\u002F\u002Fblog-api.golangblog.com\u002Fconfig\u002Fhome\n  10 threads and 18 connections\n  Thread Stats   Avg      Stdev     Max   +\u002F- Stdev\n    Latency    76.36ms   13.38ms 168.20ms   81.25%\n    Req\u002FSec    12.84      4.84    20.00     65.91%\n  Latency Distribution\n     50%   71.89ms\n     75%   78.84ms\n     90%   96.56ms\n     99%  121.26ms\n  1307 requests in 10.09s, 2.11MB read\nRequests\u002Fsec:    129.56\nTransfer\u002Fsec:    213.71KB\n",[21,1524,1525,1548,1560,1575,1593,1611,1629,1637,1648,1659,1670,1681,1700,1707],{"__ignoreMap":19},[24,1526,1527,1529,1531,1533,1535,1538,1540,1542,1544,1546],{"class":26,"data-line":27,"line":27},[24,1528,51],{"class":30},[24,1530,54],{"class":34},[24,1532,57],{"class":34},[24,1534,68],{"class":34},[24,1536,1537],{"class":125}," -c18",[24,1539,552],{"class":125},[24,1541,555],{"class":125},[24,1543,935],{"class":125},[24,1545,938],{"class":34},[24,1547,941],{"class":81},[24,1549,1550,1552,1554,1556,1558],{"class":26,"data-line":62,"line":62},[24,1551,591],{"class":30},[24,1553,594],{"class":34},[24,1555,179],{"class":34},[24,1557,599],{"class":34},[24,1559,558],{"class":34},[24,1561,1562,1564,1566,1568,1570,1573],{"class":26,"data-line":103,"line":103},[24,1563,107],{"class":106},[24,1565,608],{"class":30},[24,1567,210],{"class":34},[24,1569,613],{"class":34},[24,1571,1572],{"class":125}," 18",[24,1574,619],{"class":34},[24,1576,1577,1579,1581,1583,1585,1587,1589,1591],{"class":26,"data-line":116,"line":116},[24,1578,107],{"class":106},[24,1580,626],{"class":30},[24,1582,629],{"class":34},[24,1584,632],{"class":34},[24,1586,635],{"class":34},[24,1588,638],{"class":34},[24,1590,641],{"class":34},[24,1592,644],{"class":34},[24,1594,1595,1597,1599,1602,1605,1608],{"class":26,"data-line":153,"line":153},[24,1596,119],{"class":106},[24,1598,651],{"class":30},[24,1600,1601],{"class":34},"    76.36ms",[24,1603,1604],{"class":34},"   13.38ms",[24,1606,1607],{"class":34}," 168.20ms",[24,1609,1610],{"class":34},"   81.25%\n",[24,1612,1613,1615,1617,1620,1623,1626],{"class":26,"data-line":185,"line":185},[24,1614,119],{"class":106},[24,1616,670],{"class":30},[24,1618,1619],{"class":125},"    12.84",[24,1621,1622],{"class":125},"      4.84",[24,1624,1625],{"class":125},"    20.00",[24,1627,1628],{"class":34},"     65.91%\n",[24,1630,1631,1633,1635],{"class":26,"data-line":220,"line":220},[24,1632,107],{"class":106},[24,1634,651],{"class":30},[24,1636,1030],{"class":34},[24,1638,1639,1641,1643,1645],{"class":26,"data-line":253,"line":253},[24,1640,119],{"class":106},[24,1642,72],{"class":106},[24,1644,1039],{"class":30},[24,1646,1647],{"class":34},"   71.89ms\n",[24,1649,1650,1652,1654,1656],{"class":26,"data-line":289,"line":289},[24,1651,119],{"class":106},[24,1653,72],{"class":106},[24,1655,1051],{"class":30},[24,1657,1658],{"class":34},"   78.84ms\n",[24,1660,1661,1663,1665,1667],{"class":26,"data-line":323,"line":323},[24,1662,119],{"class":106},[24,1664,72],{"class":106},[24,1666,1063],{"class":30},[24,1668,1669],{"class":34},"   96.56ms\n",[24,1671,1672,1674,1676,1678],{"class":26,"data-line":344,"line":344},[24,1673,119],{"class":106},[24,1675,72],{"class":106},[24,1677,1075],{"class":30},[24,1679,1680],{"class":34},"  121.26ms\n",[24,1682,1683,1685,1688,1690,1692,1695,1698],{"class":26,"data-line":371,"line":371},[24,1684,107],{"class":106},[24,1686,1687],{"class":30},"1307",[24,1689,692],{"class":34},[24,1691,695],{"class":34},[24,1693,1694],{"class":34}," 10.09s,",[24,1696,1697],{"class":34}," 2.11MB",[24,1699,704],{"class":34},[24,1701,1702,1704],{"class":26,"data-line":392,"line":392},[24,1703,728],{"class":30},[24,1705,1706],{"class":125},"    129.56\n",[24,1708,1709,1711],{"class":26,"data-line":425,"line":425},[24,1710,736],{"class":30},[24,1712,1713],{"class":34},"    213.71KB\n",[504,1715,1716,1717,1720],{},"得到博客在稳定状态下最大 QPS 为 129，使用裸 ip 的 QPS 大约在 220 左右，主要原因是",[21,1718,1719],{"code":1719},"TLS \u002F HTTPS"," 的开销",[10,1722,1723],{"id":1723},"总结",[504,1725,1726],{},"性能测试的目标不是跑高数据，而是找到系统在“稳定 + 可用”前提下的真实上限。",[1728,1729,1730],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}",{"title":19,"searchDepth":116,"depth":116,"links":1732},[1733,1734,1735,1736,1737,1744],{"id":12,"depth":62,"text":12},{"id":41,"depth":62,"text":41},{"id":536,"depth":62,"text":536},{"id":581,"depth":62,"text":581},{"id":794,"depth":62,"text":794,"children":1738},[1739,1740,1741,1742,1743],{"id":804,"depth":103,"text":804},{"id":849,"depth":103,"text":849},{"id":1188,"depth":103,"text":1188},{"id":1337,"depth":103,"text":1337},{"id":1449,"depth":103,"text":1449},{"id":1723,"depth":62,"text":1723},[1746],"工程实践","2026-05-06","本文围绕 wrk 压测工具展开，从基础使用到结果分析，结合错误率、尾延迟（P95\u002FP99）、稳定性等核心指标，给出一套可落地的评估方法，用于定位系统性能瓶颈并计算稳定状态下的最大可承载吞吐量。",false,"md",null,{"slots":1753},{},true,"\u002F2026\u002F05\u002Fwrk",{"text":1757,"minutes":1758,"time":1759,"words":1760},"5 min read",4.395,263700,879,{"title":5,"description":1748},{"loc":1755},"posts\u002F2026\u002F05\u002Fwrk",[546],"tech","2026-06-10","ceQSthBSYBrZO5DgcNi-wBLoCu-D_p0Ww1OUdBfeWc0",[1769,1774],{"title":1770,"path":1771,"stem":1772,"date":1773,"type":1765,"children":-1},"VS Code 中配置 Protobuf 开发环境","\u002F2026\u002F04\u002Fkratos-vscode-proto","posts\u002F2026\u002F04\u002Fkratos-vscode-proto","2026-04-12",{"title":1775,"path":1776,"stem":1777,"date":1778,"type":1765,"children":-1},"工作中如何做好技术积累","\u002F2026\u002F06\u002Fstudy-vs-work","posts\u002F2026\u002F06\u002Fstudy-vs-work","2026-06-14",1786555052636]