Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OkHttp3套接字失败:EMFILE(打开的文件太多)_Android_Retrofit2_Okhttp3_Okio - Fatal编程技术网

Android OkHttp3套接字失败:EMFILE(打开的文件太多)

Android OkHttp3套接字失败:EMFILE(打开的文件太多),android,retrofit2,okhttp3,okio,Android,Retrofit2,Okhttp3,Okio,我正在使用改型2.0.0。 OkHttp 3.1.2。 我的一些用户遇到以下异常: java.net.SocketException:socket失败:EMFILE(打开的文件太多) 在libcore.io.IoBridge.socket(IoBridge.java:619)~[na:0.0] 在java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)~[na:0.0] 在java.net.Socket.checkOpenAndCreat

我正在使用改型2.0.0。 OkHttp 3.1.2。 我的一些用户遇到以下异常:

java.net.SocketException:socket失败:EMFILE(打开的文件太多) 在libcore.io.IoBridge.socket(IoBridge.java:619)~[na:0.0] 在java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)~[na:0.0] 在java.net.Socket.checkOpenAndCreate(Socket.java:689)~[na:0.0] 在java.net.Socket.setSoTimeout(Socket.java:543)~[na:0.0] 在com.android.org.conscrypt.OpenSSLSocketImpl.setSoTimeout(OpenSSLSocketImpl.java:1140)~[na:0.0] 在com.android.org.conscrypt.OpenSSLSocketImplWrapper.setSoTimeout(OpenSSLSocketImplWrapper.java:111)~[na:0.0] 在okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:155)~[na:0.0] 在okhttp3.internal.io.RealConnection.connect(RealConnection.java:111)~[na:0.0] 在okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188)~[na:0.0] 在okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127)~[na:0.0] 在okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)~[na:0.0] 在okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289)~[na:0.0] 在okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)~[na:0.0] 在okhttp3.RealCall.getResponse(RealCall.java:240)~[na:0.0] 在okhttp3.RealCall$ApplicationInterceptorChain.procedure(RealCall.java:198)~[na:0.0]

当我查看crashlytics时,我看到许多正在运行的线程:

在com.android.org.conscrypt.NativeCrypto.SSL_读取(NativeCrypto.java) 位于com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:811) 在okio.okio$2.read(okio.java:139) 在okio.AsyncTimeout$2.read处(AsyncTimeout.java:211) 请求(RealBufferedSource.java:71) 位于okio.RealBufferedSource.require(RealBufferedSource.java:64) 位于okio.RealBufferedSource.readInt(RealBufferedSource.java:232) 位于okhttp3.internal.framed.Spdy3$Reader.nextFrame(Spdy3.java:129) 在okhttp3.internal.framed.FramedConnection$Reader.execute(FramedConnection.java:600) 运行(NamedRunnable.java:32) 运行(Thread.java:818)

我在我的应用程序中只启动过一次Okhttp,方法如下:

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
    clientBuilder.connectTimeout(3 * 1000, TimeUnit.MILLISECONDS);
    clientBuilder.readTimeout(25 * 1000, TimeUnit.MILLISECONDS);

    File cacheDir = new File(mWeakContext.get().getFilesDir().getAbsolutePath(), "http-cache");
    Cache cache = new Cache(cacheDir, 16 * 1024 * 1024); // 16MB
    clientBuilder.cache(cache);

    // set proxy
    Properties properties = System.getProperties();
    if (properties.containsKey("https.proxyHost")) {

        String proxyHost = properties.getProperty("https.proxyHost");
        int proxyPort = Integer.parseInt(properties.getProperty("https.proxyPort"));

        clientBuilder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(
                proxyHost,
                proxyPort)
        ));
    }
    clientBuilder.addInterceptor(mHeadersInterceptor);
    clientBuilder.addInterceptor(mSignInterceptor);
    clientBuilder.addInterceptor(mLoggingInterceptor);
    mClient = clientBuilder.build();
我在这里是相当无知的,因为它不会发生很多,我不能复制在我的设备上