2016-03-30 5 views
0

Ich unsere Firma haben wir eine Menge von UI-Tests, die auf virtuellen/realen Geräten laufen. Nach dem Ausführen zufällig Absturz für einige Zeit Tests, die ich denke, ist das Ergebnis des Dateideskriptor oder weniger: I verwendenAndroid Datei Descriptor Leckage Debugging

ls /proc/${PID}/fd | wc -l und lsof -p ${PID} aber es ist nicht viel geholfen hat - die meisten der Zeilen in lsof wie folgt aussehen:

30015 u0_a104 678  sock         859560 socket:[859560] 
30015 u0_a104 679  0000    0,8     4539 anon_inode:[eventpoll] 
30015 u0_a104 680  0000    0,8     4539 anon_inode:[eventfd] 
30015 u0_a104 681  0000    0,8     4539 anon_inode:[eventfd] 
30015 u0_a104 682  0000    0,8     4539 anon_inode:[eventpoll] 
30015 u0_a104 683  0000    0,8     4539 anon_inode:[eventfd] 
30015 u0_a104 684  0000    0,8     4539 anon_inode:[eventpoll] 
30015 u0_a104 685  0000    0,8     4539 anon_inode:[eventfd] 

Also meine Frage ist: Gibt es irgendwelche Android/Java/Linux-Instrumente/utils die Quelle Leckage zu finden?

P.S. System.gc() nicht

half
+0

Sie sind undicht Dateien oder Sockets oder Selektoren. – EJP

+0

Ja, aber welche Klassen in Java benutzen sie? Wie finde ich sie? – Art

Antwort

3

Ich habe für diese Frage für eine Weile recherchiert und möchte teilen, was ich gefunden habe:

:

  1. Dateideskriptor werden in Android zumindest für verwendet

    • Netzwerk-Sockets (oder eine andere Art von Datei)
    • Zugeordnet Speicherdateien
    • Themen - so war es mein Fall. Im folgenden sehen Sie, warum
  2. Wenn Sie ein HandlerThread erstellt haben, auch wenn die letzte Verbindung zum HandlerThread Instanz Faden verschwinden wird immer noch funktionieren!

  3. Threads in Android zu sehen:

    • In "Java Heap Dump" in Speicher Abalyze Tool - so habe ich gesehen,> 500 Threads während intsrumentation Tests laufen - sie "fressen" alle Dateideskriptoren
    • Via Terminal auf android-Gerät adb shell ps -t oder nur ps -t