簡體   English   中英

在Unix域套接字上斷管的原因是什么?

[英]What is the reason for Broken Pipe on Unix Domain Sockets?

我有一個服務器應用程序,它接收請求並在Unix域套接字上轉發它們。 這在合理的使用情況下工作得很好但是當我用幾千個請求進行一些負載測試時,我收到了一個Broken Pipe錯誤。

我正在使用帶有junixsocket的 Java 7來發送請求。 我有很多並發請求,但我有一個20個工作線程的池,它寫入unix域套接字,因此沒有太多並發打開連接的問題。

對於我打開的每個請求,發送和關閉與Unix域套接字的連接。

可能導致Unix域套接字斷管的原因是什么?

更新:

如果需要,請提供代碼示例:

byte[] mydata = new byte[1024];
//fill the data with bytes ...

AFUNIXSocketAddress socketAddress = new AFUNIXSocketAddress(new File("/tmp/my.sock"));
Socket socket = AFUNIXSocket.connectTo(socketAddress);
OutputStream out = new BufferedOutputStream(socket.getOutputStream());
InputStream in = new BufferedInputStream(socket.getInputStream()));

out.write(mydata);
out.flush();  //The Broken Pipe occurs here, but only after a few thousand times

//read the response back...

out.close();
in.close();
socket.close();

我有一個包含20個工作線程的線程池,它們同時執行上述操作(最多20個並發連接到同一個Unix域套接字),每個都打開,發送和關閉。 這適用於10,000個請求突發的負載測試,但是當我放了幾千個時,我突然得到這個錯誤,所以我想知道它是否來自某些操作系統限制。

請記住,這是一個Unix域套接字,而不是網絡TCP套接字。

“斷管”表示您已寫入已被另一端關閉的連接。 由於緩沖,它在某種程度上是異步檢測的。 它基本上意味着您的應用程序協議中存在錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM