obsidian/笔记文件/2.笔记/性能检测平台 临时记录_第一章.md

156 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2025-04-23 18:35:17 +08:00
#灵感
局域网 服务端地址
服务器 IP[[192.168.1.177](http://192.168.1.177)]([http://192.168.1.177/](http://192.168.1.177/)) 用户root 密码cZr8YTtp
参考的上报日志 分析平台 演示:
[https://creporter.inspiregames.cn:81/](https://creporter.inspiregames.cn:81/) lg753951
这里是采集到,客户端发过来数据的接口逻辑:
![[Pasted image 20250314184241.png]]
安卓端,采集内存占用,统计采集耗时,逻辑参考
``` java
public static int getRSSMemoryMBProc() {
long startTime = System.nanoTime(); // 记录开始时间
try (BufferedReader br = new BufferedReader(new FileReader("/proc/self/status"))) {
String line;
while ((line = br.readLine()) != null) {
if (line.startsWith("VmRSS:")) {
String[] parts = line.split("\\s+");
int kb = Integer.parseInt(parts[1]);
long duration = (System.nanoTime() - startTime) / 1000; // 微秒耗时
Log.d("PerfMonitor", "getRSSMemoryMBProc took " + duration + "μs");
return kb / 1024;
}
}
// 如果没有找到VmRSS行也记录耗时
long duration = (System.nanoTime() - startTime) / 1000;
Log.d("PerfMonitor", "getRSSMemoryMBProc (no data) took " + duration + "μs");
} catch (Exception e) {
long duration = (System.nanoTime() - startTime) / 1000;
Log.e("PerfMonitor", "getRSSMemoryMBProc failed after " + duration + "μs", e);
e.printStackTrace();
}
return -1;
}
```
耗时统计:
![[Pasted image 20250407134056.png]]
微秒和毫秒的换算:
![[Pasted image 20250407134132.png]]
![[Pasted image 20250407134143.png]]
这里是go服务器检测和创建数据库表的相关逻辑
![[Pasted image 20250410175502.png]]
这里是整个go服务器的main启动函数入口
![[Pasted image 20250410175637.png]]
main函数运行到这里就可以判断和创建数据库了
![[Pasted image 20250410175756.png]]
也是这里,就是服务端,采集到的,相关数据和解析
![[Pasted image 20250411111816.png]]
然后这里是之前的相关封装其中Msg和ExtMsg等 额外附加数据可以看到是封装放到Report里的
![[Pasted image 20250411111957.png]]
客户端的拼接和上报
![[Pasted image 20250411112239.png]]
结构体这里,也要加上:
![[Pasted image 20250411115605.png]]
断点可以采集到非空的fpsData相关数据
![[Pasted image 20250411141921.png]]
三消的lua初始化相关
![[Pasted image 20250411154812.png]]
解析一下,主逻辑脚本;
首先,是收集的结构体
![[Pasted image 20250415100528.png]]
是一个mono的单例设置上报的时间间隔是5秒还有其他声明的变量例如SkipFrame就是跳过的帧数FailCheckInterval是发送失败后间隔多久才开始重新发送这里设定是60秒
![[Pasted image 20250415100730.png]]
这是获取,对应操作系统的名称
![[Pasted image 20250415102109.png]]
在Update函数里先跳过上述提及的5帧然后才开始采集
![[Pasted image 20250415102418.png]]
这里是检测上次失败的时间间隔这里是大于60秒才会继续重发
![[Pasted image 20250415102956.png]]
这里是发送网络消息的接口设置了超时是10秒然后重发次数还有失败多次后设置enable使能为false
![[Pasted image 20250415103219.png]]
非常朴素的获取内存占用相关这个是不可以直接使用的因为还使用到Profiler性能检测的一些接口后面需要替换成各原生层的获取内存的相关接口
![[Pasted image 20250415103921.png]]
这里是,上报拼接的,具体逻辑
![[Pasted image 20250415105531.png]]
如果要还原原本的服务器上报逻辑参考这个注释操作即可一共修改3个地方
![[Pasted image 20250418094607.png]]
跟日志上报区分一下服务端改成collect
![[Pasted image 20250418151214.png]]
客户端也同步修改一下后缀:
![[Pasted image 20250418151248.png]]
性能工具 内网服务器:运行测试程序,相关指令
``` shell
2025-05-21 17:07:14 +08:00
cd /usr/local/games/lgcollecter/
2025-04-23 18:35:17 +08:00
nohup ./lgcollecter > output.log 2>&1 &
ps -elf | grep lgcollecter
```
可以看到,是正常运行的:
![[Pasted image 20250421114219.png]]
如果需要,正常中止程序,在获取到进程号之后,直接`kill`就好,例如上述是这个
![[Pasted image 20250423160259.png]]
``` shell
kill 2400
```
进阶参考[[获取进程号和kill相关]]