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相关]]
|