堆栈损坏检测,dalvik虚拟机崩溃

5

我有一个在Android平板电脑上运行的跟踪应用程序。我注意到有些平板电脑会不时地重新启动。

当我调查问题时,我发现出现了"stack corruption detected"错误,然后几毫秒后Android虚拟机崩溃了。

这些崩溃每5分钟到20分钟就会发生一次,除了跟踪应用程序运行和使用GPS和3G外,没有其他模式。

这些平板电脑运行的是Android 4.2.2,这是三星发布的最新更新版本。

日志中没有提及我的APK,而且我的应用程序纯粹是Java编写的。到底是什么导致了这个问题,我该如何解决?

以下是logcat输出:

05-11 15:33:16.084: A/<unknown>(30963): stack corruption detected: aborted
05-11 15:33:16.116: I/ServiceManager(99): service 'bluetooth_manager' died
05-11 15:33:16.155: I/ServiceManager(99): service 'bluetooth_secure_mode_manager' died
05-11 15:33:16.155: I/ServiceManager(99): service 'input_method' died
05-11 15:33:16.155: I/ServiceManager(99): service 'accessibility' died
05-11 15:33:16.155: I/ServiceManager(99): service 'meminfo' died
05-11 15:33:16.155: I/ServiceManager(99): service 'DirEncryptService' died
05-11 15:33:16.155: I/ServiceManager(99): service 'container_service' died
05-11 15:33:16.155: I/ServiceManager(99): service 'audio' died
05-11 15:33:16.155: I/ServiceManager(99): service 'wallpaper' died
05-11 15:33:16.155: I/ServiceManager(99): service 'display' died
05-11 15:33:16.155: I/ServiceManager(99): service 'power' died
05-11 15:33:16.155: I/ServiceManager(99): service 'activity' died
05-11 15:33:16.155: I/ServiceManager(99): service 'CustomFrequencyManagerService' died
05-11 15:33:16.155: I/ServiceManager(99): service 'gfxinfo' died
05-11 15:33:16.155: I/ServiceManager(99): service 'usagestats' died
05-11 15:33:16.155: I/ServiceManager(99): service 'content' died
05-11 15:33:16.155: I/ServiceManager(99): service 'log_manager_service' died
05-11 15:33:16.155: I/ServiceManager(99): service 'cpuinfo' died
05-11 15:33:16.155: I/ServiceManager(99): service 'account' died
05-11 15:33:16.155: I/ServiceManager(99): service 'telephony.registry' died
05-11 15:33:16.155: I/ServiceManager(99): service 'battery' died
05-11 15:33:16.155: I/ServiceManager(99): service 'entropy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'mount' died
05-11 15:33:16.155: I/ServiceManager(99): service 'sensorservice' died
05-11 15:33:16.155: I/ServiceManager(99): service 'dbinfo' died
05-11 15:33:16.155: I/ServiceManager(99): service 'vibrator' died
05-11 15:33:16.155: I/ServiceManager(99): service 'mdm.remotedesktop' died
05-11 15:33:16.155: I/ServiceManager(99): service 'alarm' died
05-11 15:33:16.155: I/ServiceManager(99): service 'scheduling_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'hardware' died
05-11 15:33:16.155: I/ServiceManager(99): service 'user' died
05-11 15:33:16.155: I/ServiceManager(99): service 'permission' died
05-11 15:33:16.155: I/ServiceManager(99): service 'batteryinfo' died
05-11 15:33:16.155: I/ServiceManager(99): service 'edmnativehelper' died
05-11 15:33:16.155: I/ServiceManager(99): service 'harmony_eas_service' died
05-11 15:33:16.155: I/ServiceManager(99): service 'enterprise_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'remoteinjection' died
05-11 15:33:16.155: I/ServiceManager(99): service 'clipboard' died
05-11 15:33:16.155: I/ServiceManager(99): service 'clipboardEx' died
05-11 15:33:16.155: I/ServiceManager(99): service 'netstats' died
05-11 15:33:16.155: I/ServiceManager(99): service 'textservices' died
05-11 15:33:16.155: I/ServiceManager(99): service 'statusbar' died
05-11 15:33:16.155: I/ServiceManager(99): service 'application_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'wifi_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'package' died
05-11 15:33:16.155: I/ServiceManager(99): service 'phone_restriction_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'network_management' died
05-11 15:33:16.155: I/ServiceManager(99): service 'enterprise_license_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'window' died
05-11 15:33:16.155: I/ServiceManager(99): service 'input' died
05-11 15:33:16.155: I/ServiceManager(99): service 'netpolicy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'multiwindow' died
05-11 15:33:16.155: I/ServiceManager(99): service 'wifip2p' died
05-11 15:33:16.155: I/ServiceManager(99): service 'sec_analytics' died
05-11 15:33:16.155: I/ServiceManager(99): service 'wifi' died
05-11 15:33:16.155: I/ServiceManager(99): service 'wfd' died
05-11 15:33:16.155: I/ServiceManager(99): service 'notification' died
05-11 15:33:16.155: I/ServiceManager(99): service 'dropbox' died
05-11 15:33:16.155: I/ServiceManager(99): service 'devicestoragemonitor' died
05-11 15:33:16.155: I/ServiceManager(99): service 'search' died
05-11 15:33:16.155: I/ServiceManager(99): service 'country_detector' died
05-11 15:33:16.155: I/ServiceManager(99): service 'location' died
05-11 15:33:16.155: I/ServiceManager(99): service 'updatelock' died
05-11 15:33:16.155: I/ServiceManager(99): service 'throttle' died
05-11 15:33:16.155: I/ServiceManager(99): service 'servicediscovery' died
05-11 15:33:16.155: I/ServiceManager(99): service 'connectivity' died
05-11 15:33:16.155: I/ServiceManager(99): service 'lock_settings' died
05-11 15:33:16.155: I/ServiceManager(99): service 'device_policy' died
05-11 15:33:16.155: I/ServiceManager(99): service 'usb' died
05-11 15:33:16.155: I/ServiceManager(99): service 'serial' died
05-11 15:33:16.155: I/ServiceManager(99): service 'uimode' died
05-11 15:33:16.155: I/ServiceManager(99): service 'backup' died
05-11 15:33:16.155: I/ServiceManager(99): service 'appwidget' died
05-11 15:33:16.155: I/ServiceManager(99): service 'diskstats' died
05-11 15:33:16.155: I/ServiceManager(99): service 'AtCmdFwd' died
05-11 15:33:16.155: I/ServiceManager(99): service 'samplingprofiler' died
05-11 15:33:16.155: I/ServiceManager(99): service 'commontime_management' died
05-11 15:33:16.155: I/ServiceManager(99): service 'motion_recognition' died
05-11 15:33:16.155: I/ServiceManager(99): service 'voip' died
05-11 15:33:16.155: I/ServiceManager(99): service 'dreams' died
05-11 15:33:16.155: I/ServiceManager(99): service 'license_log_service' died
05-11 15:33:16.162: W/AudioFlinger(30688): power manager service died !!!
05-11 15:33:16.170: I/audio_policy_mrvl(30688): mrvl_ap_dev_release_output: 2 (hardware output)
05-11 15:33:16.170: I/audio_policy_mrvl(30688): mrvl_ap_dev_release_output: 2 (hardware output)
05-11 15:33:16.178: W/Sensors(31110): sensorservice died [0x5d194240]
05-11 15:33:16.178: W/Sensors(31315): sensorservice died [0x5d1b4d70]
05-11 15:33:16.178: W/Sensors(31217): sensorservice died [0x5bab4fa0]
05-11 15:33:16.178: W/Sensors(31204): sensorservice died [0x5d1ae190]
05-11 15:33:16.178: W/Sensors(2742): sensorservice died [0x5d13c0e8]
05-11 15:33:16.186: D/SurfaceFlinger(111): Screen acquired, type=0 flinger=0x405083c8
05-11 15:33:16.186: D/SurfaceFlinger(111):  screen was previously acquired
05-11 15:33:16.373: D/AndroidRuntime(31204): Shutting down VM
05-11 15:33:16.373: W/dalvikvm(31204): threadid=1: thread exiting with uncaught exception (group=0x40dee930)
05-11 15:33:16.420: E/AndroidRuntime(31204): FATAL EXCEPTION: main
05-11 15:33:16.420: E/AndroidRuntime(31204): java.lang.RuntimeException: android.os.DeadObjectException
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.net.TrafficStats.getMobileIfaces(TrafficStats.java:641)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.net.TrafficStats.getMobileTxPackets(TrafficStats.java:270)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at com.android.internal.telephony.DataConnectionTracker$TxRxSum.updateTxRxSum(DataConnectionTracker.java:510)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at com.android.internal.telephony.DataConnectionTracker.updateDataActivity(DataConnectionTracker.java:1566)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at com.android.internal.telephony.DataConnectionTracker$2.run(DataConnectionTracker.java:431)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.os.Handler.handleCallback(Handler.java:725)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.os.Looper.loop(Looper.java:176)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.app.ActivityThread.main(ActivityThread.java:5365)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at java.lang.reflect.Method.invokeNative(Native Method)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at java.lang.reflect.Method.invoke(Method.java:511)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at dalvik.system.NativeStart.main(Native Method)
05-11 15:33:16.420: E/AndroidRuntime(31204): Caused by: android.os.DeadObjectException
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.os.BinderProxy.transact(Native Method)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.net.INetworkStatsService$Stub$Proxy.getMobileIfaces(INetworkStatsService.java:232)
05-11 15:33:16.420: E/AndroidRuntime(31204):    at android.net.TrafficStats.getMobileIfaces(TrafficStats.java:639)
05-11 15:33:16.420: E/AndroidRuntime(31204):    ... 13 more
05-11 15:33:16.452: E/installd(116): eof
05-11 15:33:16.452: E/installd(116): failed to read size
05-11 15:33:16.452: I/installd(116): closing connection
05-11 15:33:16.452: I/Process(31204): Sending signal. PID: 31204 SIG: 9
05-11 15:33:16.452: E/AndroidRuntime(31204): Error reporting crash
05-11 15:33:16.452: E/AndroidRuntime(31204): android.os.DeadObjectException
05-11 15:33:16.452: E/AndroidRuntime(31204):    at android.os.BinderProxy.transact(Native Method)
05-11 15:33:16.452: E/AndroidRuntime(31204):    at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:3624)
05-11 15:33:16.452: E/AndroidRuntime(31204):    at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:138)
05-11 15:33:16.452: E/AndroidRuntime(31204):    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
05-11 15:33:16.452: E/AndroidRuntime(31204):    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
05-11 15:33:16.452: E/AndroidRuntime(31204):    at dalvik.system.NativeStart.main(Native Method)
05-11 15:33:16.467: I/ServiceManager(99): service 'phone' died
05-11 15:33:16.467: I/ServiceManager(99): service 'isms' died
05-11 15:33:16.467: I/ServiceManager(99): service 'phoneext' died
05-11 15:33:16.467: I/ServiceManager(99): service 'iphonesubinfo' died
05-11 15:33:16.467: I/ServiceManager(99): service 'sip' died
05-11 15:33:16.467: I/ServiceManager(99): service 'simphonebook' died
05-11 15:33:16.467: I/audio_policy_mrvl(30688): mrvl_ap_dev_release_output: 2 (hardware output)
05-11 15:33:16.608: I/BootAnimation(6191): ret=2, fps:12, interval:83333
05-11 15:33:16.639: I/BootAnimation(6191): createSurface RGB565
05-11 15:33:16.639: E/BootAnimation(6191): /sys/class/sec/led/led_pattern: open error, fd = -1
05-11 15:33:16.639: W/BootAnimation(6191): resolution w=600, h=1024
05-11 15:33:16.639: W/BootAnimation(6191): original qmg w=600, h=1024
05-11 15:33:17.233: E/InputEventReceiver(31217): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.444: E/InputEventReceiver(31110): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.444: E/Sensors(31315): SensorEventQueue::waitForEvent error HANGUP
05-11 15:33:17.444: E/InputEventReceiver(835): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.452: E/InputEventReceiver(31110): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.452: E/InputEventReceiver(835): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.452: E/InputEventReceiver(835): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.452: E/InputEventReceiver(835): channel ~ Publisher closed input channel or an error occurred.  events=0x9
05-11 15:33:17.452: D/Zygote(30691): Process 30963 terminated by signal (6)
05-11 15:33:17.452: I/Zygote(30691): Exit zygote because system server (30963) has terminated
05-11 15:33:17.616: I/Netd(6197): Netd 1.0 starting
05-11 15:33:17.623: W/InterfaceController(6197): Warning (Cannot load library: load_library(linker.cpp:745): library "/system/lib/libnetcmdiface.so" not found) while opening the net interface command library
05-11 15:33:17.772: E/SMD(107): DCD OFF
05-11 15:33:17.928: I/ServiceManager(99): service 'media.audio_flinger' died
05-11 15:33:17.928: I/ServiceManager(99): service 'media.player' died
05-11 15:33:17.928: I/ServiceManager(99): service 'media.camera' died
05-11 15:33:17.928: I/ServiceManager(99): service 'media.audio_policy' died
05-11 15:33:17.936: D/FileMonitorService(120): binderDied() 1 0x40918c90, tid 158, calling tid 120

您的服务已停止,可能是由操作系统杀死或应用程序停止。尝试覆盖onDestroy并查看堆栈跟踪。 - adnan_e
在logcat中哪个语句指示操作系统停止了我的服务?为什么其他服务也会停止? - Numenor
抛出android.os.DeadObjectException异常,这意味着您调用的对象已死亡,因为其父进程不再存在。操作系统可能会因各种原因杀死您的服务,请尝试在onCommandStart()中返回STICKY,但我的第一步将是在onDestroy()中记录日志,以查看服务在被杀死后是否真的崩溃(无论出于什么原因)。 - adnan_e
谢谢,我现在正在尝试onDestroy。 - Numenor
当崩溃发生时,onDestroy不会被调用,至少不会打印日志。 - Numenor
1
我看,android.net.TrafficStats.getMobileIfaces正在调用已经失效的对象,而不是我... - Numenor
3个回答

7

这不是你的应用程序崩溃了。而是Android运行时崩溃了,并且它会把一切东西(包括你的应用程序)一起带走。

每当你看到大量服务死亡时,你就知道system_server已经崩溃了。一些特定的日志突出了故障:

05-11 15:33:16.084: A/<unknown>(30963): stack corruption detected: aborted
[...]
05-11 15:33:17.452: D/Zygote(30691): Process 30963 terminated by signal (6)
05-11 15:33:17.452: I/Zygote(30691): Exit zygote because system server (30963) has terminated

首先发现系统服务堆栈损坏是失败原因,其他两个标识符确定pid 30963是系统服务。信号6是SIGABRT,检测到损坏后系统服务会向自己发送该信号。
这不是您可以修复的问题 - 平台存在错误,而不是您的应用程序。我猜测是系统服务中存在一些错误代码,可能是由OEM引入的,并且被您的应用程序触发。您可能可以通过更改应用程序的行为以避免触发该错误来解决问题,但是如果没有了解更多有关错误的信息,则可能很难。如果此设备未更新至4.2.2以上版本,则从制造商获取系统修复的可能性较小。
您可以通过使用adb logcat -v threadtime收集日志以显示线程ID,然后查看哪个线程报告了损坏来了解更多信息。在崩溃之前使用adb shell ps -t可能会给线程提供有意义的标签。当然,在本机损坏的情况下,任何线程都可以破坏其他线程,但是在堆栈损坏的情况下,更可能是线程自身受到伤害。

我尝试运行adb命令并看到了2个崩溃,都给出了“检测到堆栈损坏:中止”来自LocationManager的消息(匹配您发布的两个adb命令之间的进程号)。您有什么建议可以处理这些信息吗?我的应用程序严重依赖GPS,似乎是LocationManager导致问题。 - Numenor
在两个logcat消息中,我在崩溃之前看到了这些内容: 05-11 19:42:40.862 12569 12614 D SensorService: [AR] -12.1 1.8 -0.205-11 19:42:40.862 12569 12614 D SensorService: AutoRotationSensor :: process:Ar_SensorChanged oldrotation = [3],rotation = [255]05-11 19:42:40.862 12569 12615 V WindowOrientationListener: Rotation Sensor:x = 255.0你认为方向传感器会引起问题吗?还是只是巧合? - Numenor
1
据我所知,OEM提供了GPS和运行在system_server中的传感器代码。不幸的是,我不知道有什么简单的方法来调试这种情况。听起来像是与GPS有关,但你不能停止使用GPS。有许多应用程序使用GPS而不会导致设备崩溃,因此可能存在某种触发故障的使用模式。 - fadden
这个问题肯定是与位置管理器和 GPS 相关的。 我尝试禁用旋转传感器,但它仍然崩溃。 您能给我提供任何指针来调试此问题吗? - Numenor
不一定。如果您的应用程序正在引发崩溃,那么以小的方式更改应用程序的行为可能会避免问题。减少调用次数,或按不同顺序进行调用。堆栈损坏可能是由于缓冲区溢出造成的,因此请注意任何可能会导致缓冲区泛滥的情况。 - fadden

3

这个问题与GPS有关,经过几周的工厂重置后就会变得平稳,然后再次出现。所以我猜测与A-GPS缓存有关。

我使用以下代码在每次重新启动后清除GPS缓存,看起来好像有效。

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.sendExtraCommand(LocationManager.GPS_PROVIDER,"delete_aiding_data", null);
Bundle bundle = new Bundle();
locationManager.sendExtraCommand("gps", "force_xtra_injection", bundle);
locationManager.sendExtraCommand("gps", "force_time_injection", bundle);

这仍然不是一个解决办法,只是一种忽略和延迟问题的权宜之计。实际的问题存在于SM-T111NQ设备上,三星公司还没有提供任何解决方案。


我也遇到了这个可怕的SM-T111,同样的问题。从logcat中,我可以看到失败的PID会产生来自BatteryService、SensorService、PowerManagerService、Monitor、Watchdog、SignalStrength、GpsLocationProvider等日志消息,可能还有更多。但我可以确认只有在运行我的应用程序时才会发生这种情况,该应用程序大量使用GPS。而且,从线程ID来看,我可以确认是位置服务出了问题。 - lef
也许我们两个都做了一个导致这个失败的模式(就像@fadden指出的那样)。 - lef
@lef 你可以尝试上面的解决方案,定期清除GPS辅助数据(每天或每周一次)对我来说解决了这个问题。 - Numenor
似乎有Android 5 Lollipop的更新可用。也许这可以帮助?http://www.lollipopupdate.xyz/upgrade-update-samsung-galaxy-tab-3-lite-3g-sm-t111-to-5-0-lollipop.html - lef

-1

有时候似乎找不到adb。所以请尝试重新安装Dalvik机器和adb安装程序。


这个问题发生在真实设备上,而且我没有重新安装Dalvik机器的方法。 - Numenor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接