Admin Service

Start the admin service:

  1. web.BConfig.Listen.EnableAdmin = true

And you can specify the admin service host and port:

  1. web.BConfig.Listen.AdminAddr = "localhost"
  2. web.BConfig.Listen.AdminPort = 8088

Open web browser and types URL: http://localhost:8088/ you can see Welcome to Admin Dashboard.

请求统计信息

Access http://localhost:8088/qps:

Admin Service - 图1

How can I use the statistics? Add statistics like this:

  1. admin.StatisticsMap.AddStatistics("POST", "/api/user", "&admin.user", time.Duration(2000))
  2. admin.StatisticsMap.AddStatistics("POST", "/api/user", "&admin.user", time.Duration(120000))
  3. admin.StatisticsMap.AddStatistics("GET", "/api/user", "&admin.user", time.Duration(13000))
  4. admin.StatisticsMap.AddStatistics("POST", "/api/admin", "&admin.user", time.Duration(14000))
  5. admin.StatisticsMap.AddStatistics("POST", "/api/user/astaxie", "&admin.user", time.Duration(12000))
  6. admin.StatisticsMap.AddStatistics("POST", "/api/user/xiemengjun", "&admin.user", time.Duration(13000))
  7. admin.StatisticsMap.AddStatistics("DELETE", "/api/user", "&admin.user", time.Duration(1400))

Get statistics information:

  1. admin.StatisticsMap.GetMap(os.Stdout)

Here is the output:

  1. | requestUrl | method | times | used | max used | min used | avg used |
  2. | /api/user | POST | 2 | 122.00us | 120.00us | 2.00us | 61.00us |
  3. | /api/user | GET | 1 | 13.00us | 13.00us | 13.00us | 13.00us |
  4. | /api/user | DELETE | 1 | 1.40us | 1.40us | 1.40us | 1.40us |
  5. | /api/admin | POST | 1 | 14.00us | 14.00us | 14.00us | 14.00us |
  6. | /api/user/astaxie | POST | 1 | 12.00us | 12.00us | 12.00us | 12.00us |
  7. | /api/user/xiemengjun | POST | 1 | 13.00us | 13.00us | 13.00us | 13.00us |

Profiling

Monitoring the performance of running processes is a very good way to optimize performance and to look for issues in our application. E.g.: information of GC and goroutine.

Profile provides a easy entry point for you to debug the application. It uses the ProcessInput entry function to process the requests. Here are some debugging types:

  • lookup goroutine

    Print out the tasks of all goroutines which are currently running. You can easily see what all goroutines are doing.

    1. goroutine 3 [running]:
    2. runtime/pprof.writeGoroutineStacks(0x634238, 0xc210000008, 0x62b000, 0xd200000000000000)
    3. /Users/astaxie/go/src/pkg/runtime/pprof/pprof.go:511 +0x7c
    4. runtime/pprof.writeGoroutine(0x634238, 0xc210000008, 0x2, 0xd2676410957b30fd, 0xae98)
    5. /Users/astaxie/go/src/pkg/runtime/pprof/pprof.go:500 +0x3c
    6. runtime/pprof.(*Profile).WriteTo(0x52ebe0, 0x634238, 0xc210000008, 0x2, 0x1, ...)
    7. /Users/astaxie/go/src/pkg/runtime/pprof/pprof.go:229 +0xb4
    8. _/Users/astaxie/github/beego/toolbox.ProcessInput(0x2c89f0, 0x10, 0x634238, 0xc210000008)
    9. /Users/astaxie/github/beego/toolbox/profile.go:26 +0x256
    10. _/Users/astaxie/github/beego/toolbox.TestProcessInput(0xc21004e090)
    11. /Users/astaxie/github/beego/toolbox/profile_test.go:9 +0x5a
    12. testing.tRunner(0xc21004e090, 0x532320)
    13. /Users/astaxie/go/src/pkg/testing/testing.go:391 +0x8b
    14. created by testing.RunTests
    15. /Users/astaxie/go/src/pkg/testing/testing.go:471 +0x8b2
    16. goroutine 1 [chan receive]:
    17. testing.RunTests(0x315668, 0x532320, 0x4, 0x4, 0x1)
    18. /Users/astaxie/go/src/pkg/testing/testing.go:472 +0x8d5
    19. testing.Main(0x315668, 0x532320, 0x4, 0x4, 0x537700, ...)
    20. /Users/astaxie/go/src/pkg/testing/testing.go:403 +0x84
    21. main.main()
    22. _/Users/astaxie/github/beego/toolbox/_test/_testmain.go:53 +0x9c
  • lookup heap

    Print out information of current heap:

    1. heap profile: 1: 288 [2: 296] @ heap/1048576
    2. 1: 288 [2: 296] @
    3. # runtime.MemStats
    4. # Alloc = 275504
    5. # TotalAlloc = 275512
    6. # Sys = 4069608
    7. # Lookups = 5
    8. # Mallocs = 469
    9. # Frees = 1
    10. # HeapAlloc = 275504
    11. # HeapSys = 1048576
    12. # HeapIdle = 647168
    13. # HeapInuse = 401408
    14. # HeapReleased = 0
    15. # HeapObjects = 468
    16. # Stack = 24576 / 131072
    17. # MSpan = 4472 / 16384
    18. # MCache = 1504 / 16384
    19. # BuckHashSys = 1476472
    20. # NextGC = 342976
    21. # PauseNs = [370712 77378 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    22. # NumGC = 2
    23. # EnableGC = true
    24. # DebugGC = false
  • lookup threadcreate

    Print out information of threads:

    1. threadcreate profile: total 4
    2. 1 @ 0x17f68 0x183c7 0x186a8 0x188cc 0x19ca9 0xcf41 0x139a3 0x196c0
    3. # 0x183c7 newm+0x27 /Users/astaxie/go/src/pkg/runtime/proc.c:896
    4. # 0x186a8 startm+0xb8 /Users/astaxie/go/src/pkg/runtime/proc.c:974
    5. # 0x188cc handoffp+0x1ac /Users/astaxie/go/src/pkg/runtime/proc.c:992
    6. # 0x19ca9 runtime.entersyscallblock+0x129 /Users/astaxie/go/src/pkg/runtime/proc.c:1514
    7. # 0xcf41 runtime.notetsleepg+0x71 /Users/astaxie/go/src/pkg/runtime/lock_sema.c:253
    8. # 0x139a3 runtime.MHeap_Scavenger+0xa3 /Users/astaxie/go/src/pkg/runtime/mheap.c:463
    9. 1 @ 0x17f68 0x183c7 0x186a8 0x188cc 0x189c3 0x1969b 0x2618b
    10. # 0x183c7 newm+0x27 /Users/astaxie/go/src/pkg/runtime/proc.c:896
    11. # 0x186a8 startm+0xb8 /Users/astaxie/go/src/pkg/runtime/proc.c:974
    12. # 0x188cc handoffp+0x1ac /Users/astaxie/go/src/pkg/runtime/proc.c:992
    13. # 0x189c3 stoplockedm+0x83 /Users/astaxie/go/src/pkg/runtime/proc.c:1049
    14. # 0x1969b runtime.gosched0+0x8b /Users/astaxie/go/src/pkg/runtime/proc.c:1382
    15. # 0x2618b runtime.mcall+0x4b /Users/astaxie/go/src/pkg/runtime/asm_amd64.s:178
    16. 1 @ 0x17f68 0x183c7 0x170bc 0x196c0
    17. # 0x183c7 newm+0x27 /Users/astaxie/go/src/pkg/runtime/proc.c:896
    18. # 0x170bc runtime.main+0x3c /Users/astaxie/go/src/pkg/runtime/proc.c:191
    19. 1 @
  • lookup block

    Print out information of block:

    1. --- contention:
    2. cycles/second=2294781025
  • start cpuprof

    Start recording cpuprof info into created file cpu-pid.pprof.

  • stop cpuprof

    Stop recording.

  • get memprof

    Start recording memprof into created file mem-pid.memprof

  • gc summary

    Check GC status:

    1. NumGC:2 Pause:54.54us Pause(Avg):170.82us Overhead:177.49% Alloc:248.97K Sys:3.88M Alloc(Rate):1.23G/s Histogram:287.09us 287.09us 287.09us

Health Check

It can check the health status of your application. E.g.: To check if database is available:

  1. type DatabaseCheck struct {
  2. }
  3. func (dc *DatabaseCheck) Check() error {
  4. if dc.isConnected() {
  5. return nil
  6. } else {
  7. return errors.New("can't connect database")
  8. }
  9. }

Then you can add it as a check item:

  1. admin.AddHealthCheck("database",&DatabaseCheck{})

After this you can send get request to /healthcheck:

  1. $ curl http://beego.vip:8088/healthcheck
  2. * deadlocks: OK
  3. * database: OK

It will return the database status accordingly.

定时任务

The user needs to have added Timed Tasks to the application in order to perform the corresponding task checks and manually triggered tasks.

  • http://localhost:8088/task
  • or: http://localhost:8088/task?taskname=task name

Configuration information

  • All configuration http://localhost:8088/listconf?command=conf
  • Routers: http://localhost:8088/listconf?command=router
  • Filters: http://localhost:8088/listconf?command=filter