Android R车机ScheduledThreadPoolExecutor报Thread::park failed异常
Android R车载端ScheduledThreadPoolExecutor偶发SIGABRT崩溃问题
在Android R车载设备上使用ScheduledThreadPoolExecutor实现周期性任务时,偶发native signal 6异常,相关信息如下:
代码实现
private static class NamedThreadFactory implements ThreadFactory { private final AtomicInteger mThreadNumber = new AtomicInteger(1); private final String mNamePrefix; NamedThreadFactory(String namePrefix) { mNamePrefix = namePrefix + "-thread-"; } @Override public Thread newThread(Runnable r) { final Thread thread = new Thread(r, mNamePrefix + mThreadNumber.getAndIncrement()); return thread; } } private ScheduledThreadPoolExecutor mPopDataRefreshExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("refreshPopData")); mPopDataRefreshExecutor.scheduleAtFixedRate(new PopDataRefresher(), TimeUnit.MINUTES.toMillis(5), TimeUnit.MINUTES.toMillis(10), TimeUnit.MILLISECONDS);
崩溃基础信息
- 系统Revision:
0 - CPU ABI:
arm - 崩溃时间戳: 1912-01-03 13:32:13+0800
- 进程线程信息: pid 9441, tid 11146, 线程名
RefreshPopData-,所属进程com.demo,uid 1010065 - 崩溃信号: signal 6 (SIGABRT), code -1 (SI_QUEUE)
- 终止原因: Failed to park: Invalid argument
崩溃时寄存器快照:
r0 00000000 r1 00002b8a r2 00000006 r3 bb98eb00 r4 bb98eb14 r5 bb98eaf8 r6 000024e1 r7 0000016b r8 bb98eb10 r9 bb98eb00 r10 bb98eb30 r11 bb98eb20 ip 00002b8a sp bb98ead0 lr f1fa158f pc f1fa15a2
崩溃调用栈
#00 pc 000545a2 /apex/com.android.runtime/lib/bionic/libc.so (abort+166) (BuildId: ced36bae419d8d9438cf6f91c6feea37) #01 pc 003a0f7d /apex/com.android.runtime/lib/libart.so (art::Runtime::Abort(char const*)+1980) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #02 pc 000085e1 /system/lib/libbase.so (android::base::LogMessage::~LogMessage()+488) (BuildId: d8f9959168f480e25050a2b6cf313736) #03 pc 003cff97 /apex/com.android.runtime/lib/libart.so (art::Thread::Park(bool, long long)+1570) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #04 pc 003417e9 /apex/com.android.runtime/lib/libart.so (art::Unsafe_park(_JNIEnv*, _jobject*, unsigned char, long long)+440) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #05 pc 000edfc9 /system/framework/arm/boot.oat (art_jni_trampoline+96) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #06 pc 0024e283 /system/framework/arm/boot.oat (java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos+818) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #07 pc 003914f7 /system/framework/arm/boot.oat (java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take+326) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #08 pc 003600dd /system/framework/arm/boot.oat (sun.nio.fs.UnixPath.getParent [DEDUPED]+36) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #09 pc 0034b265 /system/framework/arm/boot.oat (java.util.concurrent.ThreadPoolExecutor.getTask+428) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #10 pc 0034c9ff /system/framework/arm/boot.oat (java.util.concurrent.ThreadPoolExecutor.runWorker+222) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #11 pc 0034a0a7 /system/framework/arm/boot.oat (java.util.concurrent.ThreadPoolExecutor$Worker.run+54) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #12 pc 001da039 /system/framework/arm/boot.oat (java.lang.Thread.run+64) (BuildId: 16090464612e7610f7b849552ef4a978eef87738) #13 pc 000e4bc5 /apex/com.android.runtime/lib/libart.so (art_quick_invoke_stub_internal+68) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #14 pc 0045e97b /apex/com.android.runtime/lib/libart.so (art_quick_invoke_stub+250) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #15 pc 000ecffd /apex/com.android.runtime/lib/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+160) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #16 pc 0039ab77 /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+54) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #17 pc 0039b881 /apex/com.android.runtime/lib/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue const*)+300) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #18 pc 003d0e73 /apex/com.android.runtime/lib/libart.so (art::Thread::CreateCallback(void*)+982) (BuildId: b1931727e2af1deddf3d63be01bc9e06) #19 pc 0009c5e7 /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+20) (BuildId: ced36bae419d8d9438cf6f91c6feea37) #20 pc 00055a97 /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (BuildId: ced36bae419d8d9438cf6f91c6feea37)
已开展排查
- 为定位问题添加调试日志后,使用相同APK在同一设备上复测,问题未再复现。
- 查阅AOSP中
Thread::park对应源码,确认崩溃点对应futex wait操作返回EINVAL错误,但无法明确Failed to park: Invalid argument的具体触发场景,需要对应的排查方向与修复建议。
内容的提问来源于stack exchange,提问作者Deson
相关产品推荐
相关产品推荐

