SocketOutputStream.socketWrite остается в рабочем состоянии, когда отправка файла не может быть завершена из-за проблемы с сервером - PullRequest
0 голосов
/ 27 июня 2019

Я использую Apache DefaultHttpClient для вызова PUT-запроса к серверу.Я отправляю файл

HttpPut putRequest = new HttpPut(uri)
DefaultHttpClient client = new DefaultHttpClient(...

ByteArrayEntity entity = new ByteArrayEntity(sourceFile);
entity.setContentType(UPLOAD_CONTENT_TYPE);
putRequest.setEntity(entity);

HttpResponse response = client.execute(putRequest);

Когда диск сервера заполнен, поток не генерирует исключение и не уничтожает себя.Сервер остается в состоянии RUNNABLE.Он должен был вернуться с исключением, которое выбрасывается сервером или по крайней мере истекло.Но он остается работоспособным вечно.

INFO   | jvm 1    | 2019/06/27 10:04:58 | "ActivityWorkerPool-1-17" #169 daemon prio=5 os_prio=0 tid=0x000003b0a2c13800 nid=0x2318 runnable [0x000003ae65a72000]
INFO   | jvm 1    | 2019/06/27 10:04:58 |    java.lang.Thread.State: RUNNABLE
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at java.net.SocketOutputStream.socketWrite0(Native Method)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:879)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:850)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       - locked <0x000003af988853f8> (a sun.security.ssl.AppOutputStream)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:179)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:113)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.entity.ByteArrayEntity.writeTo(ByteArrayEntity.java:114)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:94)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:110)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:118)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:263)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.conn.ManagedClientConnectionImpl.sendRequestEntity(ManagedClientConnectionImpl.java:214)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:238)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:684)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
INFO   | jvm 1    | 2019/06/27 10:04:58 |       at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)

Я пытался указать connectionTimeout, socketTimeout, но это не помогло.Любое предложение.

Редактировать: при попытке запроса PUT из приложения, такого как почтальон, он выдает ответ «HTTP / 1.1 500 Internal Server Error»

Затем я запустил код как отдельную java-программу:используя точно такую ​​же версию Apache jar, он дал следующий ответ:

HTTP/1.1 500 Internal Server Error [Date: Thu, 27 Jun 2019 11:51:55 GMT, Set-Cookie: _soap_session="ccc3b3a3eb0cd5fe4385daa2030943cb005dbd52"; Path=/; HttpOnly; Secure; , Connection: close, Content-Security-Policy: block-all-mixed-content, Content-Type: text/plain; charset=utf-8, Strict-Transport-Security: max-age=31536000, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, X-XSS-Protection: 1, Content-Length: 0] org.apache.http.conn.BasicManagedEntity@2a70a3d8

Так что, только когда он входит в состав нашего продукта, он зависает, как показано выше.Теперь единственное отличие, которое я вижу в 2 системах, - это изменение второстепенной версии Java.

Standloane-программа Java (сборка 1.8.0_121-b13).Система продукта Java (сборка 1.8.0_192-b12)

** Редактировать 2: Я запустил отдельную программу при установке моего продукта, т.е. с (сборка 1.8.0_192-b12).Но это не зависало.Ответ содержал ошибку, как и ожидалось.

...