在我的Android应用程序中,我遇到了几个Too many open files
错误的问题。
我确信在我的应用程序中没有文件描述符泄漏,并且我当前的上限设置为1024个打开的文件:
adb shell ulimit -a
time(cpu-seconds) unlimited
file(blocks) unlimited
coredump(blocks) 0
data(KiB) unlimited
stack(KiB) 8192
lockedmem(KiB) 64
nofiles(descriptors) 1024
processes 12016
sigpending 12016
msgqueue(bytes) 819200
maxnice 40
maxrtprio 0
resident-set(KiB) unlimited
address-space(KiB) unlimited
我没有root权限,所以我尝试使用以下命令来增加这个数字:
adb shell ulimit -n 2048
但是限制没有改变。所以我改变了我的用户名并重试:
adb shell run-as [package.name]
~ ulimit -n 2048
~ ulimit -a
limit -a
time(cpu-seconds) unlimited
file(blocks) unlimited
coredump(blocks) 0
data(KiB) unlimited
stack(KiB) 8192
lockedmem(KiB) 64
nofiles(descriptors) 2048
processes 12016
sigpending 12016
msgqueue(bytes) 819200
maxnice 40
maxrtprio 0
resident-set(KiB) unlimited
address-space(KiB) unlimited
我已经实现了只为当前进程增加这个限制,当我重新启动应用程序时,限制又是1024。
有没有其他方法可以永久性地提高这一限制?
**P.S.**我还搜索了/etc/security/limits.conf
文件,但没有任何运气
2条答案
按热度按时间velaa5lx1#
除了使用
ulimit -n
来增加最大打开文件数,你可以使用ndk的system APIgetrlimit/setrlimit
来获取或设置资源限制,你可以在应用启动或运行时调用这些api。但是你可能不会在Android的资源限制调整上得到好运气,在我测试的Android设备中,打开文件的当前限制和最大限制分别是1024/1346。即使你将限制设置为最大值1346,也不会得到太多好处。
请从man7查看
getrlimit/setrlimit
的更多信息。8i9zcol22#
我今天测试了两个设备,第一个是谷歌像素3XL,第二个是三星s20FE.
两个报告值均高于32k:
FD限值电流=32768最大值=32768
怎么可能?这比1024还要多