在我的安卓应用程序中,我遇到了一些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我没有根权限,所以我尝试使用以下命令来增加这个数字:
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文件,没有任何运气
发布于 2020-06-12 02:54:06
与其使用ulimit -n来增加最大打开的文件,还可以使用来自ndk的sytem getrlimit/setrlimit来获取或设置资源限制。您可以在应用程序启动或在应用程序运行期间调用这些apis。
struct rlimit rlm {};
if (getrlimit(RLIMIT_NOFILE, &rlm) < 0) {
LOGE("getrlimit %s", strerror(errno));
} else {
__android_log_print(ANDROID_LOG_DEBUG, TAG, "%d %d", rlm.rlim_cur, rlm.rlim_max);
rlm.rlim_cur = rlm.rlim_max;
if (setrlimit(RLIMIT_NOFILE, &rlm) < 0) {
LOGE("setrlimit %s", strerror(errno));
}
}但是,在Android的资源限制调整方面,你可能不太走运,在我测试Android设备时,打开的文件当前限制和最大限制分别是1024/1346。即使您将限制设置为最大值1346,也不会得到太多的好处。
查看getrlimit/setrlimit的更多信息,来自man7。
https://stackoverflow.com/questions/57007894
复制相似问题