Thursday, September 24, 2009
Thursday, August 6, 2009
Automatic Memory Leak Tracking on Android
Android provides a mechanism to track memory leakage.
In folder bionic/libc/bionic/malloc_leak.c is compiled into /system/lib/libc_debug.so, it is a memory leakage tracking version of libc.so. To enable the memory leakage tracking, replace the /system/lib/libc.so with the /system/lib/libc_debug.so.
Use 'mv' command may have problem without libc.so, in that case use 'cp' command instead.
With the memory leak tracking, you shall see something like "MALLOC_DEBUG = 1 (leak checker)" in your logcat output.
In folder bionic/libc/bionic/malloc_leak.c is compiled into /system/lib/libc_debug.so, it is a memory leakage tracking version of libc.so. To enable the memory leakage tracking, replace the /system/lib/libc.so with the /system/lib/libc_debug.so.
> adb shell mv /system/lib/libc.so /system/lib/libc_original.soBefore doing that, be sure to remount the system partition to 'rw'.
> adb shell mv /system/lib/libc_debug.so /system/lib/libc.so
Use 'mv' command may have problem without libc.so, in that case use 'cp' command instead.
With the memory leak tracking, you shall see something like "MALLOC_DEBUG = 1 (leak checker)" in your logcat output.
Thursday, June 11, 2009
android memory usage with hprof
Android provides some mechanisms to generate hprof data:
- Dalvik VM will dump hprof file within /data/misc folder if SIGUSR1 and/or SIGQUIT signal is received. Manually send SIGUSR1 to process: kill -10 pid.
- The android provides monkey tool (random testing tool), with --hprof option will generate hprof file within /data/misc folder.
- In cupcake release, a new API has been introduced to generate a dump programmatically, the static method dumpHprofData(String fileName) of the Debug class. Example: Debug.dumpHprofData("xxx.hprof").
- The folder /data/misc shall have 777 permissions.
- The hprof file format is heap-dump-tm
-pid .hprof-head and heap-dump-tm -pid .hprof if android 1.1 release is used. - The hprof file format is heap-dump-tm
-pid .hprof if android 1.5 release is used. - If two files are generated, you need to join the two files into one: type heap-dump-tm
-pid .hprof-head > dump.hprof; type heap-dump-tm -pid .hprof >> dump.hprof. - Convert the hprof to standard hprof format: hprofconv dump.hprof out_dump.hprof
- Use JProfiler, Eclipse MAT, or other tools to open out_dump.hprof. I tried JProfiler and got the same problems as indicated in http://osdir.com/ml/android-porting/2009-04/msg00597.html.
- Eclipse MAT: http://www.eclipse.org/mat/
- MAT standalone: MemoryAnalyzer-Incubation-0.7.0.20081210-win32.win32.x86.zip
- Hprofconv: http://bigflake.com/HprofConv.c.txt
Monday, June 8, 2009
Android Java Space OOM
The default Android java space heap maximum limitation is 16M. If you are running multimedia applications on android, such as jpg file decoding, video decoding, you may run OOM (Out Of Memory). If memory tuning can not help you on the OOM, you can go to the file: frameworks/base/core/jni/AndroidRuntime.cpp, line 607, change opt.optionString = "-Xmx16m" to opt.optionString = "-Xmx20m" for 20M heap size or even bigger.
The limitation is the upward limitation, it will not actually allocate 20M memory every time in every java application.
Take this solution as the last try, focus on your coding quality first.
The limitation is the upward limitation, it will not actually allocate 20M memory every time in every java application.
Take this solution as the last try, focus on your coding quality first.
Tools to monitor your android system memory and performance
Tools to monitor your android/linux system memory and performance:
- ps -x
- top
- cat /proc/meminfo
- dumpsys meminfo proc-id
- procrank
- DDMS (Android SDK tool)
- time command-line
- vmstat
Android java space profiling tool - traceview
Android provides a good java space profiling tool: traceview. Traceview can be found in the same folder as adb in Android SDK package. Usage is quite simple and straightforward:
For more information about traceview window, refer to http://developer.android.com/guide/developing/tools/traceview.html
- import android.os.Debug;
- Debug.startMethodTracing("tag-name");
- Debug.stopMethodTracing();
- Run the Java application
- Fetch out the profiling output file on SD card (SD card is needed) root folder: tag-name.trace
- traceview tag-name.trace to open the traceview window
For more information about traceview window, refer to http://developer.android.com/guide/developing/tools/traceview.html
Tuesday, May 19, 2009
fdatasync not found in bionic libc
fdatasync(int) declare is found in bionic/libc/include/unistd.h, but it is not actually implemented in libc. I can NOT find the fdatasync symbol in /system/lib/libc.so.
Thursday, February 26, 2009
UI/Application Exerciser Monkey
The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner.
Basic usage of monkey:
#send 1000 events to all applications
Basic usage of monkey:
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]Example: adb shell monkey 1000
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions] [--monitor-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-anyevent PERCENT]
[--wait-dbg] [--dbg-no-events]
[-s SEED] [-v [-v] ...] [--throttle MILLISEC]
COUNT
#send 1000 events to all applications
Subscribe to:
Posts (Atom)