性能检测平台 临时记录_第一章.md 4.6 KB

#灵感

局域网 服务端地址

服务器 IP:192.168.1.177 用户:root 密码:cZr8YTtp

参考的上报日志 分析平台 演示:

https://creporter.inspiregames.cn:81/ lg753951

这里是采集到,客户端发过来数据的接口逻辑:

![[Pasted image 20250314184241.png]]

安卓端,采集内存占用,统计采集耗时,逻辑参考

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

性能工具 内网服务器:运行测试程序,相关指令

cd /usr/local/games/lgcollecter/
nohup ./lgcollecter > output.log 2>&1 &
ps -elf | grep lgcollecter

可以看到,是正常运行的:

![[Pasted image 20250421114219.png]]

如果需要,正常中止程序,在获取到进程号之后,直接kill就好,例如上述是这个

![[Pasted image 20250423160259.png]]

kill 2400

进阶参考[[获取进程号和kill相关]]