首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >永久增加Android中的文件描述符ulimit,而不使用root

永久增加Android中的文件描述符ulimit,而不使用root
EN

Stack Overflow用户
提问于 2019-07-12 13:23:30
回答 1查看 1.2K关注 0票数 1

在我的安卓应用程序中,我遇到了一些Too many open files错误的问题。

我确信我的应用程序中没有文件下降器泄漏,并且我当前的上限设置为1024个打开的文件:

代码语言:javascript
复制
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

我没有根权限,所以我尝试使用以下命令来增加这个数字:

代码语言:javascript
复制
adb shell ulimit -n 2048

但极限并没有改变。所以我更改了我的用户身份并重新尝试:

代码语言:javascript
复制
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文件,没有任何运气

EN

回答 1

Stack Overflow用户

发布于 2020-06-12 02:54:06

与其使用ulimit -n来增加最大打开的文件,还可以使用来自ndk的sytem getrlimit/setrlimit来获取或设置资源限制。您可以在应用程序启动或在应用程序运行期间调用这些apis。

代码语言:javascript
复制
    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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57007894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档