aliyun / aliyun-log-android-sdk

MIT License
180 stars 40 forks source link

SLS SDK 导致 ANR 问题 #60

Closed chiclaim closed 2 years ago

chiclaim commented 3 years ago

bugly 上的堆栈信息如下图所示:

image

chaolee50 commented 3 years ago

你好,出现这个问题的次数多吗,发送的数据量有多少呢,详细的配置参数是什么呢,有配置多个client吗

chiclaim commented 3 years ago

不多,我刚刚往市场放。没有使用多个 client,数据量不多,800个字节。配置如下:

// 每个缓存的日志包的大小上限,取值为1~5242880,单位为字节。默认为1024 * 1024
  config?.setPacketLogBytes(1024 * 1024)
  // 每个缓存的日志包中包含日志数量的最大值,取值为1~4096,默认为1024
  config?.setPacketLogCount(1024)
  // 被缓存日志的发送超时时间,如果缓存超时,则会被立即发送,单位为毫秒,默认为3000
  config?.setPacketTimeout(3000)
  // 单个Producer Client实例可以使用的内存的上限,超出缓存时add_log接口会立即返回失败
  // 默认为64 * 1024 * 1024
  config?.setMaxBufferLimit(64 * 1024 * 1024)
  // 发送线程数,默认为1
  config?.setSendThreadCount(1)

  // 1 开启断点续传功能, 0 关闭
  // 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once
  config?.setPersistent(1)
  // 持久化的文件名,需要保证文件所在的文件夹已创建。配置多个客户端时,不应设置相同文件
  config?.setPersistentFilePath("$persistPath/log.dat")
  // 是否每次AddLog强制刷新,高可靠性场景建议打开
  config?.setPersistentForceFlush(1)
  // 持久化文件滚动个数,建议设置成10。
  config?.setPersistentMaxFileCount(10)
  // 每个持久化文件的大小,建议设置成1-10M
  config?.setPersistentMaxFileSize(1024 * 1024)
  // 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可
  config?.setPersistentMaxLogCount(65536)
chaolee50 commented 3 years ago

你好,可以改一下这个参数试试,config.setPersistent(0) 断点续传功能对性能消耗比较大,每次请求都会刷磁盘

chiclaim commented 3 years ago

这样改的话会导致日志丢失吗?如果上传不存本地一份,如果上传失败,下次还会续传吗?

wuyinlei commented 3 years ago

你好这个问题解决了么?确实有部分机型会出现这个anr问题

cooaer commented 3 years ago

同有ANR的问题,请问这个问题修复了吗? image

wuyinlei commented 3 years ago

他们技术说是先更新到最新版试试。

wuyinlei commented 3 years ago

最新的版本也是有这个anr的问题的。请问修复了么

chiclaim commented 3 years ago

@chaolee50 这个问题挺久的了,麻烦阿里专家一起看下哦。

wuyinlei commented 3 years ago

这个问题确实很久了,有没有专家进行跟进呢,大佬

cnbleu commented 3 years ago

@chiclaim @cooaer @wuyinlei 是否可以提供下原始的 anr trace 文件。