-
RMI连接问题10
先贴下异常信息:
Lookup of RMI stub failed; nested exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketException: Connection reset
org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI stub failed; nested exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketException: Connection reset
at org.springframework.remoting.rmi.RmiClientInterceptor.lookupStub(RmiClientInterceptor.java:215)
at org.springframework.remoting.rmi.RmiClientInterceptor.getStub(RmiClientInterceptor.java:237)
at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:257)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy2.handleEvent(Unknown Source)
at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl.handleEvent(EventSenderImpl.java:219)
at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl.sendEventTask(EventSenderImpl.java:191)
at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl.access$0(EventSenderImpl.java:173)
at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl$ResSendTask.run(EventSenderImpl.java:166)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketException: Connection reset
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:286)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:84)
at org.springframework.remoting.rmi.RmiClientInterceptor.lookupStub(RmiClientInterceptor.java:200)
... 18 more
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at java.io.DataInputStream.readByte(DataInputStream.java:248)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:228)
... 23 more
问题描述:在同一台linux服务器同时发布N个RMI服务,当这个N大于某个数据时,有的服务被调用时就报了这个异常,调用该服务的客户端有的连接正常,有的连接会报这个错误,我关掉了任意一个正常或非正常的服务,其他所有服务都通了,这个问题貌似是linux对连接数做了限制吗?有知道的rmi哥哥或者linux哥哥指点下
问题补充:suziwen 写道看看这个或许有帮助
http://blog.csdn.net/guowake/article/details/6615728
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256619
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 10240
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
这是nofile已经做了设置了,tcp连接多了,貌似会报can't open too mary file的错,这个帖子好像没帮助
还有看看服务器防火墙是不是也做了限制
问题补充:suziwen 写道
这防火墙的限制怎么查看呢
问题补充:wangqj 写道linux默认1024个连接
大概多少个rmi服务,每个服务峰值连接多少,当然这个限制可以修改
你说的1024个连接时哪种连接呢,
我就发布了12个RMI服务,第13个就报错了,好像跟连接数没有关系似的,连接应该不超过1024,
下面是linux ulimit -a 命令看到的
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256619
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 10240
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
问题补充:wangqj 写道
当你发布第13个的时候,telnet一下是否有问题,是不是端口被占用了?你的异常是客户端报的,你看服务端是否启动了?有没有什么异常
发布到第13个的时候,服务启动没有报错,客户端掉用这些服务就会报错,
同一个服务有的客户端可以正常访问,有的客户端端访问报了我贴的异常,
telnet端口是连上后马上断掉。可以正常连接的端口是不会马上断掉的。2012年3月08日 09:45
3个答案 按时间排序 按投票排序
-
采纳的答案
看看这个或许有帮助
http://blog.csdn.net/guowake/article/details/6615728
还有看看服务器防火墙是不是也做了限制2012年3月08日 09:59
-
当你发布第13个的时候,telnet一下是否有问题,是不是端口被占用了?你的异常是客户端报的,你看服务端是否启动了?有没有什么异常2012年3月08日 17:19
相关推荐
5. 故障排查和监控,如何诊断RMI连接问题,以及如何收集和分析性能指标以改进系统。 在文件"20093356谭进仕"中,可能会包含这次会议的详细记录、技术报告或者是一个案例研究,涵盖了上述话题的具体实现和经验分享。...
通过这种方式,我们可以利用RMI创建一个跨网络的数据库连接池服务,使得客户端可以高效地共享和管理数据库连接,而无需直接维护这些连接。这样的设计提高了系统的可扩展性和可靠性,同时也降低了资源消耗。在"myPool...
JMX以RMI方式连接的场景示例 JMX(Java Management Extensions)是一种Java技术,用于管理...JMX框架提供了一种灵活、可扩展和高效的方式来管理和监控应用程序,而RMI连接方式允许远程客户端访问MBean提供的管理功能。
然后,客户端通过RMI连接到服务器的JMX代理,使用JMX API来查询或操作MBean。例如,你可以获取内存使用情况、线程状态、垃圾回收器信息等。在实际应用中,这有助于进行性能监控、故障排查和资源优化。 在开发过程中...
"rmi 连接多 IP 多服务端自动路由"这个主题涉及到如何在RMI环境中实现高可用性和容错性,当服务端在一个IP地址上不可用时,客户端能自动切换到其他IP上的服务实例。 首先,我们要理解RMI的基本工作原理。RMI系统由...
- **异常处理**:RMI调用可能遇到网络中断、远程对象不存在等问题,因此客户端需要适当地捕获和处理`java.rmi`包下的异常,如`RemoteException`。 3. **RMI通信机制**: - **marshalling**与**unmarshalling**:...
- 客户端需要知道服务器的IP地址和端口号,然后使用相同的`SslRMIClientSocketFactory`创建连接,以确保安全的RMI通信。客户端将通过调用服务器上的Service来建立连接。 以下是一个简单的例子,展示了如何在同一台...
以下是对Java RMI的详细解释以及一些常见问题的解答。 ### 1. RMI基本概念 RMI的核心是远程接口(Remote Interface),它定义了可以在远程对象上调用的方法。这些方法的实现位于远程服务器上,客户端通过调用这些...
- **客户端(Client)**: 客户端通过RMI连接到服务器,获取远程对象实例,并调用其方法来发送和接收消息。客户端可能包含用户界面,如GUI,用于输入和显示聊天内容。 ### 3. 图形界面 这个聊天室项目还包含了图形...
客户端连接到服务器,并请求执行某个方法。对于客户端来说,远程方法就像是本地方法。 3. **对象注册表(Object Registry)**:这是一个程序,用于注册服务器上的对象。对象注册表通常运行在一个已知端口上(默认为...
通过Spring的配置,我们可以轻松地在客户端和服务器之间建立连接,实现远程方法调用,提高应用的可扩展性和灵活性。理解并熟练运用Spring的RMI支持,对于构建大型、分布式的企业级应用至关重要。
- **RMI超时设置**:可以配置RMI连接和操作的超时时间,防止因网络延迟导致的应用阻塞。 - **RMI缓存**:客户端可以缓存远程对象的引用,减少重复的远程查找操作。 - **负载均衡**:通过RMI注册表,可以将请求分发到...
3. **注册表(Registry)**:RMI注册表是服务定位器,它提供了一个简单的命名服务,客户端可以通过它查找并连接到远程对象。 **RMI的工作流程** 1. **服务器端**:创建远程对象实例,将其绑定到RMI注册表,指定一...
确保客户端和服务器之间的网络连接畅通。 这个简单的例子展示了Spring RMI的基本用法,但实际应用中可能需要考虑更多因素,如安全性、事务管理、异常处理等。通过Spring RMI,我们可以轻松地构建可扩展的分布式系统...
- **异常处理**:RMI中的异常通常包括网络连接问题、对象不存在、版本不匹配等,需要适当地捕获和处理。 - **RMI与EJB的结合**:EJB(Enterprise JavaBeans)是Java EE的一部分,RMI常用于EJB组件之间的通信,尤其...
`FileClient`可能包含一个方法,如`downloadFromServer(String serverURL, String fileName)`,它通过RMI连接到指定的服务器URL,然后调用`FileInterface.downloadFile(fileName)`来开始下载。 5. **FileImpl_Stub....
- 客户端通过查找远程对象的引用(stub)与服务器建立连接。 - 客户端调用远程接口的方法,这个调用会被stub捕获。 - stub序列化调用参数,并通过网络发送给服务器。 - 服务器端的RMISkeleton接收到消息,反序列...
RMI注册表负责存储远程对象的引用,使得客户端能够找到并连接到它们。 3. **聊天室服务器**:`chatserver`可能是这个项目的服务器端程序,它包含RMI服务器的实现,包括创建远程对象,注册到RMI注册表,并处理来自...
2. **启动RMI服务**:在每个节点上,需要启动RMI注册服务器,这样其他节点才能找到并连接到它。这可以通过调用`java.rmi.registry.LocateRegistry.createRegistry(port)`来完成。 3. **创建RMI绑定**:接着,每个...