最近开发的项目出现过在线状态下,过一段时间就无端崩溃的问题,bugly也没法准确捕获到异常,偶尔会捕获到cursor 2048kb 创建不了的异常,但是可以确定数据库的操作肯定是正常的,因为在线离线对数据库的操作都是一样的,唯独在线会崩溃。
经过排查之后锁定在了发送心跳上,进一步测试发现心跳越频繁崩溃越快,可以确定肯定有什么东西被不断创建没有释放了。
结论:因为代码失误(此处就不贴了)心跳发送协议的时候开了线程池管理子线程发送协议,而线程池每次都直接new一个新的,最终导致这个问题,因为用AS的profiler观察内存并没有疯涨,捕获的异常也要么是socket要么是cursor的,并没有直接说到和线程池相关,所以在此记录,以后遇到类似的情况可以排查下线程池创建的地方是否一直调用。