/lepd

server daemon of LEP

Primary LanguageC

lepd

server daemon of LEP

LepD是什么

LEP的结构采用的是Client/Server的模型, Client端是Django+Web服务器,负责显示从Server端取得的数据。 Server端是我们最终需要profile的target。 LepD运行在Server(Target)端, 它的工作如下:

是一个JsonRpcServer, Client通过JsonRpc连接 LepD会解析接收到的RPC命令,取得系统的各类不同的数据信息,比如内存,CPU,IO状态 将取得的结果,转换成Json格式返回给Client

LepD应用

LepvClient通过JsonRpc连接

简单测试时,通过Linux nc命令即可

发送"ListAllMethod?"这个rpc方法,可以获得LepD所支持的所有方法

root@bob-VirtualBox:~# echo "{\"method\":\"ListAllMethod\"}" | nc <lepd IP地址> 12307

{

"result":	"SayHello ListAllMethod GetProcMeminfo GetProcLoadavg GetProcVmstat GetProcZoneinfo GetProcBuddyinfo GetProcCpuinfo GetProcSlabinfo GetProcSwaps GetProcInterrupts GetProcSoftirqs GetProcDiskstats GetProcVersion GetProcStat GetProcModules GetCmdFree GetCmdProcrank GetCmdIostat GetCmdVmstat GetCmdTop GetCmdTopH GetCmdIotop GetCmdSmem GetCmdDmesg lepdendstring"

}

root@bob-VirtualBox:~#

具体某个方法,比如想获得内存的信息

root@bob-VirtualBox:~# echo "{\"method\":\"GetProcMeminfo\"}" | nc <lepd IP地址> 12307

{

"result":	"MemTotal:        1017788 kB\nMemFree:          426560 kB\nBuffers:           77080 kB\nCached:           231968 kB\nSwapCached:            0 kB\nActive:           342212 kB\nInactive:         172488 kB\nActive(anon):     207000 kB\nInactive(anon):    11256 kB\nActive(file):     135212 kB\nInactive(file):   161232 kB\nUnevictable:           0 kB\nMlocked:               0 kB\nSwapTotal:             0 kB\nSwapFree:              0 kB\nDirty:                92 kB\nWriteback:             0 kB\nAnonPages:        205652 kB\nMapped:            40480 kB\nShmem:             12608 kB\nSlab:              50868 kB\nSReclaimable:      39328 kB\nSUnreclaim:        11540 kB\nKernelStack:        1336 kB\nPageTables:         6768 kB\nNFS_Unstable:          0 kB\nBounce:                0 kB\nWritebackTmp:          0 kB\nCommitLimit:      508892 kB\nCommitted_AS:     947444 kB\nVmallocTotal:   34359738367 kB\nVmallocUsed:        8796 kB\nVmallocChunk:   34359721724 kB\nHardwareCorrupted:     0 kB\nAnonHugePages:     67584 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:        0\nHugePages_Surp:        0\nHugepagesize:       2048 kB\nDirectMap4k:       63360 kB\nDirectMap2M:      985088 kB\nDirectMap1G:           0 kB\nlepdendstring"

}

root@bob-VirtualBox:~# 

当发现LepD连不上,或者获得不到数据时,直接Kill掉lepd进程,然后再通过如下命令把LepD重启 git@iZ22ngfe4n3Z:~$ /opt/deploy_lepv/lepd &

如何编译

root@bob-VirtualBox:~#  git clone https://github.com/linuxep/lepd

For X86(电脑需要安装libev-dev库):

电脑需要提前安装:

{

apt-get install libev-dev 
apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`
apt-get install libncurses5-dev

}

root@bob-VirtualBox:~/lepd-src# make

For ARM(电脑需要安装arm-linux-gnueabi-gcc):

root@bob-VirtualBox:~/lepd-src# make ARCH=arm 

如何运行

运行lepd需要root权限,因为系统有些proc文件无root权限无法读取。

lepd运行的板子、服务器的内核需要使能TASKSTATS,这样IOTOP的功能才可以起来: General setup --->

CPU/Task time and stats accounting --->

[*] Export task/process statistics through netlink

[*] Enable per-task delay accounting

[*] Enable extended accounting over taskstats

[*] Enable per-task storage I/O accounting

目前,LEPD还没有集成perf的功能,因此,要求目标平台上,还是有安装perf,内核也使能perf相关的支持。

如果要在浏览器中支持火焰图,也需要lepd运行的目标平台上支持了perf!

实现

用了cJSON和jsonrpc-c

在server.c里面解析rpc方法,结果转成Json格式的字符串返回给Client