【问题标题】:How Do I Change The RMI Listen Backlog Size?如何更改 RMI 侦听积压大小?
【发布时间】:2020-02-19 17:08:05
【问题描述】:

我在 Linux 上的 Java (7) 应用程序遇到网络问题,数据包偶尔会延迟。

系统管理员说侦听积压设置太低,因此接受连接的速度不够快。

ss -lt
State      Recv-Q Send-Q    Local Address:Port    Peer Address:Port
LISTEN     0      50        *:1099                *:*

本系统默认为 128

sysctl -a 2>/dev/null|grep net.core.somaxconn
net.core.somaxconn = 128

JDK7 中 RMI 连接的默认值是 50 吗?

如何增加它以使其使用系统默认值?

【问题讨论】:

  • 您的系统管理员弄错了。 RMI 不设置自己的积压,它使用默认值,并尽可能快地接受连接。 “延迟的数据包”与侦听积压没有任何关系。如果积压是问题,您将遇到连接失败,而不是延迟数据包。您要解决的实际问题是什么?
  • 此说法不正确。 RMI 实际上确实设置了积压并且不使用系统默认值。
  • @opticyclic RMI 将它设置在哪里?您的回答表明 new ServerSocket() 设置它,而不是 RMI。
  • @user207421 停止分裂头发。默认 RMI 实现调用另一个设置默认值的类。因此,默认的 RMI 实现是 50。你为什么要用无用的 cmets 来解决这个问题?

标签: java linux rmi


【解决方案1】:

看起来 50 JDK 中的默认值。

sun.rmi.transport.tcp.TCPEndpoint 致电RMIServerSocketFactory.createServerSocket(this.listenPort); RMIServerSocketFactory 的实现例如RMIDirectSocketFactorynew ServerSocket(int);

正如我们从 ServerSocket javadocs 中看到的: https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#ServerSocket(int)

传入连接指示的最大队列长度(a 连接请求)设置为 50

因此,增加该值的一种方法是创建您自己的RMIServerSocketFactory 实现并调用不同的ServerSocket 构造函数,该构造函数允许您设置自己的积压值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多