system_server socket 泄露

system_server 报oom

02-13 21:19:00.236 1122 1138 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: ActivityManager
02-13 21:19:00.236 1122 1138 E AndroidRuntime: java.lang.OutOfMemoryError: Could not allocate JNI Env
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at java.lang.Thread.nativeCreate(Native Method)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at java.lang.Thread.start(Thread.java:1063)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.pm.PackageManagerService$PackageUsage.write(PackageManagerService.java:1162)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.pm.PackageManagerService.performDexOpt(PackageManagerService.java:7260)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.pm.PackageManagerService.performDexOptIfNeeded(PackageManagerService.java:7240)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.am.ActivityManagerService.ensurePackageDexOpt(ActivityManagerService.java:3462)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.am.BroadcastQueue.processCurBroadcastLocked(BroadcastQueue.java:310)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1210)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.am.BroadcastQueue$BroadcastHandler.handleMessage(BroadcastQueue.java:205)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:111)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at android.os.Looper.loop(Looper.java:207)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:61)
02-13 21:19:00.236 1122 1138 E AndroidRuntime: at com.android.server.ServiceThread.run(ServiceThread.java:46)
02-13 21:19:00.236 1122 1138 I am_crash: [1122,0,system_server,-1,java.lang.OutOfMemoryError,Could not allocate JNI Env,Thread.java,-2]


查看上下文:
02-13 21:19:00.208 1122 1138 E art : ashmem_create_region failed for 'indirect ref table': Too many open files
02-13 21:19:00.208 1122 1138 W art : Throwing OutOfMemoryError "Could not allocate JNI Env"
应该是fd泄露,造成的问题,
使用 GAT 查看mtk log
db.fatal.00.JE.dbg 解析出的PROCESS_FILE_STAE 文件:
由此文件可以看出,系统的 socket 过多达到了700 多个,手机正常应该在 100 个左右,


socket泄露造成的此问题,

system_server 的socket泄露往往是因为Input Channel 没有关闭, 需要将InputTransport.cpp 文件中的debug开关打开,复现,进一步定位:

可以去

framework/native/libs/input/InputTransport.cpp 

文件中看一下如何,打开调试开关。

在市场部分手机上可以通过:

方法1、

adb shell setprop debug.inputclient.enable 1
方法2、

adb shell setprop debug.inputlog.enabled true

adb shell dumpsys input
即可


之后创建 input channel 时会有 log:
Input channel constructed: name= *****
销毁input channel 时会有log:

Input channel destroyed: name= ******


没有复现啊。


还需要深入理解一下socket 。

socket相关的工具

ss    netstat lsof 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值