美文网首页
查看因线程总数超限而导致的内存问题

查看因线程总数超限而导致的内存问题

作者: 狼少丷 | 来源:发表于2024-01-15 16:39 被阅读0次

1. 查看系统对进程的线程数限制总数

cat /proc/sys/kernel/threads-max

image.png

不同机型限制总数不同

2. 查看当前进程运行的线程数

cat proc/{pid}/status
其中pid可以这样查找:


image.png image.png

不同机型限制总数不同

3. 获取内存相关

单个应用可用最大内存

dalvik.vm.heapgrowthlimit=64m ,它表示单个进程内存被限定在64m,即程序运行过程中实际只能使用64m内存,超出就会报OOM。(仅仅针对dalvik堆,不包括native堆)
$adb shell getprop dalvik.vm.heapgrowthlimit
256m

单个进程可用的最大内存

dalvik.vm.heapsize=512m ,但如果存在heapgrowthlimit参数,则以heapgrowthlimit为准.
$adb shell getprop dalvik.vm.heapsize
512m

应用启动后分配的初始内存

$adb shell getprop dalvik.vm.heapstartsize
8m

通过代码查看每个进程可用的最大内存,即heapgrowthlimit值:

ActivityManager.getMemoryClass():     虚拟机java堆大小的上限,分配对象时突破这个大小就会OOM
ActivityManager.getLargeMemoryClass():manifest中设置largeheap=true时虚拟机java堆的上限
Runtime.getRuntime().maxMemory() :    当前虚拟机实例的内存使用上限,为上述两者之一
Runtime.getRuntime().totalMemory() :  当前已经申请的内存,包括已经使用的和还没有使用的
Runtime.getRuntime().freeMemory() :   上一条中已经申请但是尚未使用的那部分。那么已经申请并且正在使用的部分used=totalMemory() - freeMemory()
ActivityManager.MemoryInfo.totalMem:   设备总内存
ActivityManager.MemoryInfo.availMem:   设备当前可用内存
/proc/meminfo                                           记录设备的内存信息

相关文章

网友评论

      本文标题:查看因线程总数超限而导致的内存问题

      本文链接:https://www.haomeiwen.com/subject/qesasrtx.html