好幾年沒有作過性能對比了,由於愈來愈以爲性能並無那麼的重要(相對於生態),今天有時間簡單測試一下,由於 Mix v2.1 開始就所有切換爲單進程協程模式,所以本次主要測試的是 Co\Http\Server ,測試結果在最後面。php
環境
- CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
- CPU(s): 12
- Mem: 15G
- Linux version 3.10.0-957.10.1.el7.x86_64
PHP 7.3.12 + Swoole 4.4.14
代碼中使用的單進程 Co\Http\Server ,所以須要利用端口複用 (須要 Linux >= 3.10),開啓 12 個進程linux
- 代碼
<?php \Swoole\Process::daemon(); $scheduler = new \Swoole\Coroutine\Scheduler; $scheduler->set([ 'hook_flags' => SWOOLE_HOOK_ALL, ]); $scheduler->add(function () { $server = new \Swoole\Coroutine\Http\Server('0.0.0.0', 8888, false, true); $server->handle('/', function($request, $response){ $response->end('hello, world!'); }); $server->start(); }); $scheduler->start();
- 開啓的進程
[nobody@tmp]$ ps -ef | grep test.php nobody 1917 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 1923 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 1929 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 1934 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2154 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2166 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2173 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2181 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2187 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2194 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2200 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php nobody 2205 1 0 20:22 ? 00:00:02 /usr/local/php-7.3.12/bin/php test.php
- 測試:多跑幾回,基本穩定在
127441.95
左右。
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:8888/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 8888 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.785 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 16600000 bytes HTML transferred: 1300000 bytes Requests per second: 127441.95 [#/sec] (mean) Time per request: 7.847 [ms] (mean) Time per request: 0.008 [ms] (mean, across all concurrent requests) Transfer rate: 20659.53 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.4 0 47 Processing: 2 7 0.5 7 47 Waiting: 0 7 0.4 7 14 Total: 2 8 2.6 7 58 Percentage of the requests served within a certain time (ms) 50% 7 66% 7 75% 7 80% 7 90% 8 95% 8 98% 8 99% 18 100% 58 (longest request)
Go 1.13.4
Golang 默認使用所有 CPU 線程,所以只需開啓一個進程便可。git
- 代碼
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("hello, world!")) }) err := http.ListenAndServe(":9999", nil) if err != nil{ fmt.Println(err) } }
- 開啓的進程
[nobody@~]$ ps -ef | grep gotest nobody 4409 1859 0 20:25 pts/31 00:00:06 ./gotest_linux
- 測試:多跑幾回,基本穩定在
121575.23
左右,比 Swoole 稍微差點,但很是接近,PHP 是動態語言藉助 Swoole 作到這個性能確實是很是誇張了。
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:9999/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: Server Hostname: 127.0.0.1 Server Port: 9999 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.823 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 15400000 bytes HTML transferred: 1300000 bytes Requests per second: 121575.23 [#/sec] (mean) Time per request: 8.225 [ms] (mean) Time per request: 0.008 [ms] (mean, across all concurrent requests) Transfer rate: 18283.77 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.4 0 46 Processing: 2 8 1.1 7 46 Waiting: 0 8 1.1 7 30 Total: 2 8 2.7 7 56 Percentage of the requests served within a certain time (ms) 50% 7 66% 8 75% 9 80% 9 90% 9 95% 9 98% 10 99% 18 100% 56 (longest request)
MixPHP V2.2
接下來咱們看一下跑在 PHP7.3 + Swoole4.4 下的 Mix V2.2 能跑多少。github
- 開啓的進程
[nobody@tmp]$ ps -ef | grep mix.php nobody 24783 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24801 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24821 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24839 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24856 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24873 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24891 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24908 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24927 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24946 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24963 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24981 1 0 20:51 ? 00:00:00 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d
- 測試:多跑幾回,基本穩定在
110050.47
左右,比原生 Swoole 下降了13.6%
,整個框架的代碼只下降了這個比例,仍是蠻能夠的。
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:9501/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 9501 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.909 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 18100000 bytes HTML transferred: 1300000 bytes Requests per second: 110050.47 [#/sec] (mean) Time per request: 9.087 [ms] (mean) Time per request: 0.009 [ms] (mean, across all concurrent requests) Transfer rate: 19452.28 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.5 0 45 Processing: 2 9 1.6 9 46 Waiting: 0 9 1.6 9 25 Total: 2 9 3.2 9 58 Percentage of the requests served within a certain time (ms) 50% 9 66% 9 75% 9 80% 9 90% 9 95% 10 98% 17 99% 23 100% 58 (longest request)
我嘗試減小進程測試:web
- 當減小到 5 個進程時達到最高性能
[nobody@tmp]$ ps -ef | grep mix.php nobody 24946 1 0 20:51 ? 00:00:15 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24963 1 0 20:51 ? 00:00:15 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 24981 1 0 20:51 ? 00:00:15 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 27471 1 22 21:35 ? 00:00:05 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 27522 1 18 21:35 ? 00:00:03 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d
- 測試:多跑幾回,基本穩定在
114070.87
左右,比 12 個進程的時候還高一點,證實再多開進程已經沒法提高性能了,12 線程的 CPU 爲什麼會這樣呢?
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:9501/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 9501 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.877 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 18100000 bytes HTML transferred: 1300000 bytes Requests per second: 114070.87 [#/sec] (mean) Time per request: 8.766 [ms] (mean) Time per request: 0.009 [ms] (mean, across all concurrent requests) Transfer rate: 20162.92 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.0 0 33 Processing: 0 8 3.0 8 33 Waiting: 0 8 3.0 8 24 Total: 0 9 3.7 8 43 Percentage of the requests served within a certain time (ms) 50% 8 66% 9 75% 10 80% 11 90% 12 95% 13 98% 18 99% 21 100% 43 (longest request)
Beego V1.12.1
- 代碼:
package main import ( "fmt" "net/http" "runtime" ) func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("hello, world!")) }) err := http.ListenAndServe(":9999", nil) if err != nil{ fmt.Println(err) } }
- 測試:多跑幾回,基本穩定在
107428.35
左右,與 Mix 很是接近。
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:8989/index This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: beegoServer:1.12.1 Server Hostname: 127.0.0.1 Server Port: 8989 Document Path: /index Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.931 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 18200000 bytes HTML transferred: 1300000 bytes Requests per second: 107428.35 [#/sec] (mean) Time per request: 9.309 [ms] (mean) Time per request: 0.009 [ms] (mean, across all concurrent requests) Transfer rate: 19093.71 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.4 0 45 Processing: 0 9 2.4 9 52 Waiting: 0 9 2.4 9 52 Total: 0 9 3.4 9 57 Percentage of the requests served within a certain time (ms) 50% 9 66% 9 75% 9 80% 9 90% 9 95% 15 98% 19 99% 24 100% 57 (longest request)
PHP 7.3.12 + Swoole 4.4.14 二次測試
上面減小到 5 個進程依然能夠達到 12 進程的性能,我猜想多是 ab -c 1000 只能達到 12w 左右的併發,也就是說沒有打滿,須要下降使用的線程數來測試,咱們採用 2 個線程從新測試一下。apache
- 先把測試進程減小到 2 個
[nobody@tmp]$ ps -ef | grep test.php nobody 2200 1 0 7月22 ? 00:00:16 /usr/local/php-7.3.12/bin/php test.php nobody 9600 1 0 10:30 ? 00:00:00 /usr/local/php-7.3.12/bin/php test.php
- 測試:多跑幾回,基本穩定在
136426.58
左右
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:8888/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 8888 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.733 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 16600000 bytes HTML transferred: 1300000 bytes Requests per second: 136426.58 [#/sec] (mean) Time per request: 7.330 [ms] (mean) Time per request: 0.007 [ms] (mean, across all concurrent requests) Transfer rate: 22116.03 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.2 0 43 Processing: 2 7 1.7 6 43 Waiting: 0 7 1.7 6 19 Total: 2 7 2.9 6 53 Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 6 80% 7 90% 8 95% 10 98% 16 99% 18 100% 53 (longest request)
Go 1.13.4 二次測試
- 代碼:修改成 2 個線程
package main import ( "fmt" "net/http" "runtime" ) func main() { runtime.GOMAXPROCS(2) // 限制使用線程數 http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("hello, world!")) }) err := http.ListenAndServe(":9999", nil) if err != nil{ fmt.Println(err) } }
測試:多跑幾回,基本穩定在 106834.75
左右,比 Swoole 性能低了 21.7%
,證實 Swoole 確實性能是高於 Go 的 net 庫。swoole
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:9999/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: Server Hostname: 127.0.0.1 Server Port: 9999 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 0.936 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 15400000 bytes HTML transferred: 1300000 bytes Requests per second: 106834.75 [#/sec] (mean) Time per request: 9.360 [ms] (mean) Time per request: 0.009 [ms] (mean, across all concurrent requests) Transfer rate: 16066.95 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.5 0 21 Processing: 0 9 1.9 9 21 Waiting: 0 9 1.9 9 17 Total: 0 9 2.3 9 30 Percentage of the requests served within a certain time (ms) 50% 9 66% 9 75% 10 80% 10 90% 11 95% 12 98% 13 99% 17 100% 30 (longest request)
MixPHP V2.2 二次測試
- 先把測試進程減小到 2 個
[nobody@tmp]$ ps -ef | grep mix.php nobody 7482 1 2 10:27 ? 00:00:05 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d nobody 27522 1 0 7月22 ? 00:00:35 /usr/local/php-7.3.12/bin/php mix/bin/mix.php web -r -d
- 測試:多跑幾回,基本穩定在
53856.21
左右,果真,按這個數據分析,以前 12 進程測試的數據不合理,由於 ab -c 1000 沒有將 CPU 性能打滿。
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:9501/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: swoole-http-server Server Hostname: 127.0.0.1 Server Port: 9501 Document Path: / Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 1.857 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 18100000 bytes HTML transferred: 1300000 bytes Requests per second: 53856.21 [#/sec] (mean) Time per request: 18.568 [ms] (mean) Time per request: 0.019 [ms] (mean, across all concurrent requests) Transfer rate: 9519.51 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.3 0 45 Processing: 0 18 5.5 17 46 Waiting: 0 18 5.5 17 38 Total: 0 18 5.6 17 55 Percentage of the requests served within a certain time (ms) 50% 17 66% 18 75% 19 80% 20 90% 25 95% 29 98% 32 99% 33 100% 55 (longest request)
Beego V1.12.1
- 代碼:一樣咱們限制使用 2 個線程
package main import ( "github.com/astaxie/beego" _ "hello/routers" "runtime" ) type IndexController struct { beego.Controller } func (c *IndexController) Index() { c.Ctx.Output.Body([]byte("hello, world!")) } func main() { runtime.GOMAXPROCS(2) // 限制使用線程數 beego.Router("/index", &IndexController{},"*:Index") beego.Run() }
- 測試:多跑幾回,基本穩定在
54547.49
左右,與 Mix 很是接近。
[nobody@~]$ ab -n 100000 -c 1000 -k http://127.0.0.1:8989/index This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: beegoServer:1.12.1 Server Hostname: 127.0.0.1 Server Port: 8989 Document Path: /index Document Length: 13 bytes Concurrency Level: 1000 Time taken for tests: 1.833 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 100000 Total transferred: 18200000 bytes HTML transferred: 1300000 bytes Requests per second: 54547.49 [#/sec] (mean) Time per request: 18.333 [ms] (mean) Time per request: 0.018 [ms] (mean, across all concurrent requests) Transfer rate: 9694.96 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.9 0 31 Processing: 0 18 6.3 19 40 Waiting: 0 18 6.3 19 40 Total: 0 18 6.3 19 41 Percentage of the requests served within a certain time (ms) 50% 19 66% 21 75% 22 80% 22 90% 24 95% 25 98% 28 99% 31 100% 41 (longest request)
總結一下
- 第一次測試:因爲 ab -c 1000 測試的性能沒有把 CPU 打滿,致使測試結果不公正,應該不少人會忽略這個問題,認爲本身的框架性能很高,實際上是沒有打滿。
語言/框架 | 進/線程數 | 數值 |
---|---|---|
PHP 7.3.12 + Swoole 4.4.14 | 12 | 127441.95 |
Go 1.13.4 | 1 <12線程> | 121575.23 |
PHP 7.3.12 + Swoole 4.4.14 + MixPHP 2.2 | 12 | 110050.47 |
Go 1.13.4 + Beego 1.12.1 | 12 | 107428.35 |
- 第二次測試:採用 2 線程測試比較公正,能打滿 CPU ,這樣出來的結果纔是真實結果,Swoole 比 Go 性能高
21.7%
(畢竟是 C 寫的),Mix 比 Swoole 原生下降了60.5%
的性能,而 Mix 大概是 Go 原生一半的性能,與 Beego 性能齊平。
語言/框架 | 進/線程數 | 數值 |
---|---|---|
PHP 7.3.12 + Swoole 4.4.14 | 2 | 136426.58 |
Go 1.13.4 | 1 <2線程> | 106834.75 |
PHP 7.3.12 + Swoole 4.4.14 + MixPHP 2.2 | 2 | 53856.21 |
Go 1.13.4 + Beego 1.12.1 | 2 | 54547.49 |