安卓系统system_server的问题

大神们 你们好:

我在做安卓系统应用的时候,出现system_server 狂占内存

安卓系统用的是RK的方案,,,系统开机,大概在两三分钟内,system_server的内存就
达到了200多M,因为系统内存是512M的,所以当system_server达到200多M的时候,
系统就在杀死其他应用,最后系统重启。下面图是在90多M的时候。
图片说明
我想问问有没有谁之前碰到过这种情况,是什么情况下引起的,又是该怎么解决,安卓系统是4.2

3个回答

用的哪个版本的android,512内存太少了吧!

kissvi
kentfang 我们目前定位在udp的DatagramSocket,因为只要创建了DatagramSocket,内存就不正常
3 年多之前 回复
kissvi
kentfang 我和领导的猜测也是这样的,,现在有两种解决方式,要么避免击中那个泄露的点,要么让rk来修复。感谢你哈
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 你的应用某个调用,击中了系统某个泄露的点
3 年多之前 回复
kissvi
kentfang 包括我自己apk的内存情况是正常,如果没有运行我的apk,system_server又是正常的
3 年多之前 回复
kissvi
kentfang 我在另外一台不同型号的机器上,是没有出现system_server狂占内存的情况
3 年多之前 回复
kissvi
kentfang 在获取网络状态的地方,用了Context.CONNECTIVITY_SERVICE,去生成ConnectivityManager去获取网络状态,这些应该没什么问题吧
3 年多之前 回复
kissvi
kentfang 主要是静态注册了网络变化广播,在service里面注册了动态广播,动态广播都有做取消注册操作。
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 看看你的程序是不是注册监听没有取消,或者绑定了啥系统服务没有取消这一类的
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 是运行了你的程序后导致的这个问题??
3 年多之前 回复
kissvi
kentfang 这个Arraylist应该不是我的程序导致的吧,,我的程序没有用到Arraylist,我应该怎么继续跟踪,最终找到问题呢
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 泄露的对象可能找不到引用者,但其中正在使用的那个对象是没有泄露的,那个应该有引用者
3 年多之前 回复
kissvi
kentfang 我看了下,,Arraylist大多是Arraylist$ArraylistIterator引用,,然后Arraylist$ArraylistIterator大多无引用,理论上说Arraylist和Arraylist$ArraylistIterator都是无引用了,系统没回收掉
3 年多之前 回复
kissvi
kentfang Arraylist的引用就比较多了
3 年多之前 回复
kissvi
kentfang Arraylist$ArraylistIterator无引用
3 年多之前 回复
kissvi
kentfang 正常情况下是String类型占多数,实例数比例20%左右,,不正常的情况下,Arraylist和Arraylist$ArraylistIterator的实例数占最多,分别23%左右和34%左右,
3 年多之前 回复
chenxu2614
Tauren2614 抓取一份正常时候的,在抓取一份不正常时候的,对比看下不正常时候多出了哪些东西,再看下多出来的被啥引用着
3 年多之前 回复
kissvi
kentfang 我看了下类的个数,其中Arraylist和Arraylist$ArraylistIterator的实例数最多,Arraylist$ArraylistIterator比Arraylist多
3 年多之前 回复
kissvi
kentfang 恩,昨天我就是看的是这个进程,需要看哪些数据呢,我弄了三份
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 在ddms里面名字是system_process,看他们进程号是一样的
3 年多之前 回复
kissvi
kentfang 还是不行,system_server 在devices 界面 找不到这个进程,没显示
3 年多之前 回复
kissvi
kentfang 我现在在看ddms,看看能不能抓到什么有用的信息
3 年多之前 回复
kissvi
kentfang 做了一个udp相互通讯导致的问题,但是在其他设备上(不是同一个型号)处理 是正常的
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 用DDMS看下system_process,抓个Dump文件下来,看下哪个对象多了
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 做过什么操作后出现这样情况的,先缩小下范围
3 年多之前 回复
kissvi
kentfang 回复Tauren2614: RK的方案,,订制系统,,多多少少应该修改过,system_server内存泄露了,但是不清楚怎么解决
3 年多之前 回复
chenxu2614
Tauren2614 回复kentfang: 修改过系统服务没,内存泄露了吧!回退版本一个个查吧
3 年多之前 回复
kissvi
kentfang 安卓版本是4.2的,做智能主机用,,不是手机app开发,,512M够用
3 年多之前 回复

注意图片要及时销毁,还有在activity的ondestory()中setcontentview()为一个空白的页面,这样应该能减少一些内存

kissvi
kentfang 感谢,,我的那个app是没有activity的,,是一个后台通讯服务
3 年多之前 回复

DDMS直接dump一个hprof,看一下是不是有内存泄漏

kissvi
kentfang 感谢,问题最后得到了解决,事实上是内存泄漏,但是引起内存泄漏的原因是在系统时间,你可以试一下给系统设置一个很长的时间,就会导致系统的内存泄漏了
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐