首页 > 其他分享 >SDK日志上传性能优化

SDK日志上传性能优化

时间:2023-05-12 19:57:11浏览次数:36  
标签:请求 线程 日志 上传 CPU SDK

问题描述 在SDK初始化时,会在init方法中开启一个倒计时,在5s倒计时结束后使用子线程将本地保存的历史日志信息上传到后台。 因业务需要,在日志在发送上传前,需要对日志数据做编码和特殊字符替换,而日志文件里包含的日志数据量相比于一般方法中的局部变量要大很多,所以这样集中对日志文件数据的编码和替换就直接导致了CPU占用过高,造成了宿主APP短时间卡住的情况。所以导致了因为SDK体验问题,日志启动上传功能只能被迫关闭,等待优化。

 

背景描述 SDK在使用过程中会产生日志,在操作正常情况下,一个流程结束就会把当前单次产生的日志上传到后台。而对于异常退出或其他异常时,日志就保留在了本地,等SDK第二次启动时时再上传。
问题解决情况 优化前:SDK启动时,上传日志对CPU的占用量为100%,占用时间为0.5s左右, 优化后:SDK启动时,上传日志对CPU的占用量为40%左右,占用时间为1.5s左右。   CPU使用情况数据采集如下,CPU采集频率为0.5s。 优化前CPU使用情况:

优化后CPU使用情况:

 

日志上传策略 1.当APP调用SDK的init方法初始时,在init方法中会开启一个倒计时,在5s后使用子线程进行发起上传。 2.上传方法调用后,日志工具会遍历本地日志目录下的日志文件,并将日志文件创建成NSData。 3.然后日志工具逐个读取未上传成功标记的日志数据进行data拼接。 4.每当一个Data日志拼接后会判断当前批次拼接的Data的大小是否大于100k, 如果大于则把数据放入请求参数,异步发送一个网络请求,重新创建一个Data可变对象。 5.循环执行3-4操作,直到所有的本地日志都发送到后台 当前日志上传策略逻辑清晰,但是存在一个问题。 虽然每个上传请求都是使用子线程上传不影响主线程,但是当本地日志量大时,比如有10M日志,那么可能会同时发生100条请求,并在同一时间段内集中对日志数据进行编码和特殊字符替换。这样直接就把CPU资源抢光了,所以会造成APP卡顿。
解决方法 以时间换空间,用户对日志上传时无感知的,只要不影响APP的使用就好。按照这个原则上传策略可以改为只使用一个线程,让这100个上传请求做串行上传。 如何让子线程的网络请求串行执行呢? 将上传方法在成功回调中做递归调用。递归出口是判断带上传的日志个数,如果个数大于0就继续递归调用上传,否则就什么也不做,结束上传操作。 另外,通过后台配置上传开关,在SDK调用时从后台请求到上传开关保存到本地,等上传时读取开关配置信息,判断是否开启上传。这样可用于紧急情况关闭日志上传功能。        

标签:请求,线程,日志,上传,CPU,SDK
From: https://www.cnblogs.com/zhou--fei/p/17396160.html

相关文章

  • java 的 JDK JRE , android 的 SDK NDK , native c++ 的概念
       ......
  • WebUploader 超大文件上传和断点续传的实现
    ​ 4GB以上超大文件上传和断点续传服务器的实现随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往往在网上找一些简单的PHP或者Java程序来实现基......
  • VMware Aria Operations for Logs 8.12 - 集中式日志管理
    VMwareAriaOperationsforLogs8.12-集中式日志管理请访问原文链接:https://sysin.org/blog/vmware-aria-operations-for-logs/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org集中式日志管理VMwareAriaOperationsforLogs(以前称为vRealizeLogInsight)通......
  • C#.NET 超大文件上传和断点续传的实现
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • DVWA文件上传
    Low安全级别:<?php@eval($_POST['cmd']);?>文本编辑器写入一句话木马,保存并改为php文件。上传成功上传,并返回路径打开菜刀客户端连接成功连接反弹shellMedium安全级别上传php脚本发现,上传类型做了限制,只允许上传JPEG和PNG类型。思路一:利用图片马上传将php和jpeg文件用copy命令合......
  • MySQL之redo日志
    一、redo日志简介在事务的实现机制上,MySQL采用的WAL(Write-aheadlogging,预写式日志)机制来实现的,所有的修改都先被写入到日志中,然后再被应用到系统中,通常包含redo和undo两部分信息。redolog称为重做日志,每当有操作时,在数据变更之前将操作写入redolog,这样当发生掉电之类的情况时系......
  • flutter Android SDK not configed
    https://stackoverflow.com/questions/64359564/error-java-home-is-not-set-and-no-java-command-could-be-found-in-your-flutterflutterconfig--android-studio-dir="C:\ProgramFiles\Android\AndroidStudio"......
  • .net core 上传文件大小配置
    发布会的web.config中下增加       Starup.cs增加//上传文件大小限制Kestrel设置services.Configure(options=>{//Setthelimitto256MBoptions.Limits.MaxRequestBodySize=268435456;});//上传文件大小限制IIS设置services.Configure(options=>......
  • springboot 大文件切片上传
    1.前端(vueelementui&原生)初始变量声明: currentFile:{},//当前上传的文件bigFileSliceCount:20,//大文件切片后的子文件数量(也可使用其它限定方式,如按照文件大小,每10MB切一片,此处采用的是固定切片的子文件数量的方式倒推切片大小) 接口:切片上传图片&合并......
  • SpringMVC18_文件上传6
    十四、文件上传-客户端表单实现三要素文件上传客户端表单需要满足:表单项type=“file”表单的提交方式是post表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”form.xml<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html......