diff --git a/README.md b/README.md index c4e4ebb..eea580b 100644 --- a/README.md +++ b/README.md @@ -1,93 +1,110 @@ # lepd + server daemon of LEP -## LepD是什么 + +## LepD 是什么 -LEP的结构采用的是Client/Server的模型, Client端是Django+Web服务器,负责显示从Server端取得的数据。 Server端是我们最终需要profile的target。 LepD运行在Server(Target)端, 它的工作如下: +LEP 的结构采用的是 Client/Server 的模型, Client 端是 Django+Web 服务器,负责显示从 Server 端取得的数据。 Server 端是我们最终需要 profile 的 target。 LepD 运行在 Server(Target)端,它的工作如下: +- 是一个 JsonRpcServer,Client 通过 JsonRpc 连接 +- LepD 会解析接收到的 RPC 命令,取得系统的各类不同的数据信息,比如内存、CPU、IO 状态 +- 将取得的结果,转换成 Json 格式返回给 Client -是一个JsonRpcServer, Client通过JsonRpc连接 -LepD会解析接收到的RPC命令,取得系统的各类不同的数据信息,比如内存,CPU,IO状态 -将取得的结果,转换成Json格式返回给Client +## LepD 应用 -## LepD应用 +LepvClient 通过 JsonRpc 连接 -LepvClient通过JsonRpc连接 +简单测试时,通过 Linux 的 `nc` 命令即可 -简单测试时,通过Linux nc命令即可 +发送"ListAllMethod?"这个 rpc 方法,可以获得 LepD 所支持的所有方法。如: -发送"ListAllMethod?"这个rpc方法,可以获得LepD所支持的所有方法 ```console root@bob-VirtualBox:~# echo "{\"method\":\"ListAllMethod\"}" | nc 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" +返回: + +```json +{ +"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:~# +具体某个方法,比如想获得内存的信息: -具体某个方法,比如想获得内存的信息 ```console root@bob-VirtualBox:~# echo "{\"method\":\"GetProcMeminfo\"}" | nc 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" +返回: + +```json +{ +"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" } -```console -root@bob-VirtualBox:~# ``` -当发现LepD连不上,或者获得不到数据时,直接Kill掉lepd进程,然后再通过如下命令把LepD重启 + +当发现 LepD 连不上,或者获得不到数据时,直接 Kill 掉 lepd 进程,然后再通过如下命令把 LepD 重启 + +```console git@iZ22ngfe4n3Z:~$ /opt/deploy_lepv/lepd & +``` + ## 如何编译 + ```console root@bob-VirtualBox:~# git clone https://github.com/linuxep/lepd ``` -For X86(电脑需要安装libev-dev库): + +For X86(电脑需要安装 libev-dev 库): 电脑需要提前安装: -{ +```shell +apt-get install libev-dev +apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r` +apt-get install libncurses5-dev +``` + +然后编译: - apt-get install libev-dev - apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r` - apt-get install libncurses5-dev -} ```console root@bob-VirtualBox:~/lepd-src# make ``` -For ARM(电脑需要安装arm-linux-gnueabi-gcc): + +For ARM(电脑需要安装 arm-linux-gnueabi-gcc): + ```console 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 +运行 lepd 需要 root 权限,因为系统有些 proc 文件无 root 权限无法读取。 -[*] Enable extended accounting over taskstats +lepd 运行的板子、服务器的内核需要使能 TASKSTATS,这样 IOTOP 的功能才可以起来: -[*] Enable per-task storage I/O accounting +``` +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 的功能,因此,要求目标平台上,还是有安装 perf,内核也使能 perf 相关的支持。 -## 如果要在浏览器中支持火焰图,也需要lepd运行的目标平台上支持了perf! +**如果要在浏览器中支持火焰图,也需要 lepd 运行的目标平台上支持了 perf!** ## 实现 -用了cJSON和jsonrpc-c +用了 cJSON 和 jsonrpc-c -在server.c里面解析rpc方法,结果转成Json格式的字符串返回给Client +在 server.c 里面解析 rpc 方法,结果转成 Json 格式的字符串返回给 Client。