• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 18:10
CEST 00:10
KST 07:10
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
Code S Season 1 - RO8 Preview3[ASL21] Ro8 Preview Pt2: Progenitors8Code S Season 1 - RO12 Group A: Rogue, Percival, Solar, Zoun13[ASL21] Ro8 Preview Pt1: Inheritors16[ASL21] Ro16 Preview Pt2: All Star10
Community News
Weekly Cups (April 27-May 4): Clem takes triple0RSL Revival: Season 5 - Qualifiers and Main Event11Code S Season 1 (2026) - RO12 Results12026 GSL Season 1 Qualifiers25Maestros of the Game 2 announced9
StarCraft 2
General
Code S Season 1 - RO8 Preview Behind the Blue - Team Liquid History Book Weekly Cups (April 27-May 4): Clem takes triple Blizzard Classic Cup @ BlizzCon 2026 - $100k prize pool Code S Season 1 (2026) - RO12 Results
Tourneys
GSL Code S Season 1 (2026) Sparkling Tuna Cup - Weekly Open Tournament RSL Revival: Season 5 - Qualifiers and Main Event StarCraft Evolution League (SC Evo Biweekly) 2026 GSL Season 2 Qualifiers
Strategy
Custom Maps
[D]RTS in all its shapes and glory <3 [A] Nemrods 1/4 players [M] (2) Frigid Storage
External Content
Mutation # 524 Death and Taxes The PondCast: SC2 News & Results Mutation # 523 Firewall Mutation # 522 Flip My Base
Brood War
General
BGH Auto Balance -> http://bghmmr.eu/ (Spoiler) Asl ro8 D winner interview BW General Discussion Do we have a pimpest plays list? AI Question
Tourneys
[ASL21] Ro8 Day 4 [ASL21] Ro8 Day 3 [Megathread] Daily Proleagues [ASL21] Ro8 Day 2
Strategy
Simple Questions, Simple Answers Fighting Spirit mining rates What's the deal with APM & what's its true value Any training maps people recommend?
Other Games
General Games
Dawn of War IV Stormgate/Frost Giant Megathread OutLive 25 (RTS Game) Daigo vs Menard Best of 10 Nintendo Switch Thread
Dota 2
The Story of Wings Gaming
League of Legends
G2 just beat GenG in First stand
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug Heroes of StarCraft mini-set
TL Mafia
Vanilla Mini Mafia Mafia Game Mode Feedback/Ideas TL Mafia Community Thread Five o'clock TL Mafia
Community
General
Russo-Ukrainian War Thread US Politics Mega-thread European Politico-economics QA Mega-thread 3D technology/software discussion Canadian Politics Mega-thread
Fan Clubs
The IdrA Fan Club
Media & Entertainment
Anime Discussion Thread [Manga] One Piece [Req][Books] Good Fantasy/SciFi books
Sports
2024 - 2026 Football Thread Formula 1 Discussion McBoner: A hockey love story
World Cup 2022
Tech Support
streaming software Strange computer issues (software) [G] How to Block Livestream Ads
TL Community
The Automated Ban List
Blogs
Movie Stars In Video Games: …
TrAiDoS
ramps on octagon
StaticNine
Broowar part 2
qwaykee
Funny Nicknames
LUCKY_NOOB
Customize Sidebar...

Website Feedback

Closed Threads



Active: 2336 users

Java RMI timeouts

Blogs > Freezard
Post a Reply
Freezard
Profile Blog Joined April 2007
Sweden1021 Posts
February 13 2011 16:23 GMT
#1
I'm doing a server/client program in Java using RMI. When server crashes it's not a problem, clients get a RemoteException and disconnects.

However I have problems when clients crashes. My server uses a Timer to ping all client objects every now and then, when it gets no connection to a client it will catch a RemoteException.

Then, it's supposed to remove the client object from the server (just by removing it from a list), but it's impossible because when I try to do anything with the proxy client object it will throw another RemoteException. How can I solve this problem?

*
2Pacalypse-
Profile Joined October 2006
Croatia9538 Posts
February 13 2011 16:25 GMT
#2
By posting in a more appropriate place, ie. http://stackoverflow.com/
Moderator"We're a community of geniuses because we've found how to extract 95% of the feeling of doing something amazing without actually doing anything." - Chill
Freezard
Profile Blog Joined April 2007
Sweden1021 Posts
February 13 2011 16:32 GMT
#3
I will try :-)
Cambium
Profile Blog Joined June 2004
United States16368 Posts
Last Edited: 2011-02-13 17:05:32
February 13 2011 16:59 GMT
#4
You need to be more specific and post some code. There could literally be 1000 things wrong with your code.

If you are just removing the client proxy objects from a list, I don't understand why you would need to invoke any actions upon the object itself...?

edit:

Let me rephrase it better: if you are simply removing an object from the list, you aren't actually doing anything with the object itself. You are merely removing its reference from the container.

edit2:

Also, I don't understand your design: you have your host ping your clients? A better approach would be to have your clients send a pulse to your server, and you can determine which client is down from that.
When you want something, all the universe conspires in helping you to achieve it.
Freezard
Profile Blog Joined April 2007
Sweden1021 Posts
February 13 2011 17:09 GMT
#5
I have never done remote programming. Isn't it common that servers ping their clients? Anyway I posted it here and I got some answers, will check it out.

http://stackoverflow.com/questions/4985343/java-rmi-timeouts-crashes
Cambium
Profile Blog Joined June 2004
United States16368 Posts
February 13 2011 17:13 GMT
#6
They are correct.

You call "getUser()" on a broken client, it will obviously throw exceptions.

A lot of valuable information in that thread if you are patient enough to sift through it.

re: client pinging

It's inefficient as the number of clients can grow without bound, and your server is doing all the work. If you have your clients ping your server, you distribute the workload onto the clients.
When you want something, all the universe conspires in helping you to achieve it.
Freezard
Profile Blog Joined April 2007
Sweden1021 Posts
February 13 2011 17:49 GMT
#7
Was a stupid mistake. I'm thinking about your method of pinging server instead. But I don't know how you could do that more efficient...
Trap
Profile Blog Joined May 2009
United States395 Posts
February 13 2011 18:43 GMT
#8
Your question makes no sense. By itself, the RMI server (registry) has no way of calling a method on a client; the server simply exposes a set of methods that a RMI client can call.

If your question is what happens if a client makes a RMI call on your RMI server and while the RMI server is processing the request, the server becomes unresponsive: you can set the socket timeout on the client and / or server to cleanly handle such a situation without resorting to polling (check out rmi socket factory or write a custom one).
coffeetoss | "Team Liquid Fantasy Proleague: Tales of Miserable Failure and Deep Regret" -Kanil
Macavenger
Profile Blog Joined January 2008
United States1132 Posts
February 13 2011 19:04 GMT
#9
On February 14 2011 02:49 Freezard wrote:
Was a stupid mistake. I'm thinking about your method of pinging server instead. But I don't know how you could do that more efficient...

You have (for example) each client ping the server once every minute. Every two minutes, the server goes through its list of clients and dumps any that it hasn't heard from since its last sweep. This is a lot more efficient for your server, as all it has to do is listen (which it does anyway) and go through a list checking a flag once every couple minutes. If you put your server in charge of the pinging, it has to periodically go through all the clients, ping each one, wait for responses, tag all of them, decide what an appropriate timeout is, etc. The total amount of work may be similar, but you'd rather have that work distributed to the clients which only have to maintain one connection each, rather than the server maintaining many connections.
Freezard
Profile Blog Joined April 2007
Sweden1021 Posts
February 13 2011 20:04 GMT
#10
On February 14 2011 04:04 Macavenger wrote:
Show nested quote +
On February 14 2011 02:49 Freezard wrote:
Was a stupid mistake. I'm thinking about your method of pinging server instead. But I don't know how you could do that more efficient...

You have (for example) each client ping the server once every minute. Every two minutes, the server goes through its list of clients and dumps any that it hasn't heard from since its last sweep. This is a lot more efficient for your server, as all it has to do is listen (which it does anyway) and go through a list checking a flag once every couple minutes. If you put your server in charge of the pinging, it has to periodically go through all the clients, ping each one, wait for responses, tag all of them, decide what an appropriate timeout is, etc. The total amount of work may be similar, but you'd rather have that work distributed to the clients which only have to maintain one connection each, rather than the server maintaining many connections.

OK. So in my case I would add a list of users. Every client pings the server with its user as argument. Server adds the user to the list plus any new clients who connect. After two minutes server checks for every user in the Map<User, Client> if the user also exists in the list. If not - remove that user. End by clearing the list.

Is this what you mean? I guess it's more efficient like you say.
Macavenger
Profile Blog Joined January 2008
United States1132 Posts
February 13 2011 20:27 GMT
#11
On February 14 2011 05:04 Freezard wrote:
Show nested quote +
On February 14 2011 04:04 Macavenger wrote:
On February 14 2011 02:49 Freezard wrote:
Was a stupid mistake. I'm thinking about your method of pinging server instead. But I don't know how you could do that more efficient...

You have (for example) each client ping the server once every minute. Every two minutes, the server goes through its list of clients and dumps any that it hasn't heard from since its last sweep. This is a lot more efficient for your server, as all it has to do is listen (which it does anyway) and go through a list checking a flag once every couple minutes. If you put your server in charge of the pinging, it has to periodically go through all the clients, ping each one, wait for responses, tag all of them, decide what an appropriate timeout is, etc. The total amount of work may be similar, but you'd rather have that work distributed to the clients which only have to maintain one connection each, rather than the server maintaining many connections.

OK. So in my case I would add a list of users. Every client pings the server with its user as argument. Server adds the user to the list plus any new clients who connect. After two minutes server checks for every user in the Map<User, Client> if the user also exists in the list. If not - remove that user. End by clearing the list.

Is this what you mean? I guess it's more efficient like you say.

Well, I'm not familiar with exactly what data structures you're using, or network coding in Java (I've only done it in C++), but that sounds essentially correct. I'm used to doing it as something like a list of IP/port pairs (clients) that the server has active connections to, and storing a boolean flag for each of them that indicates whether it has heard from them recently, and just clearing that flag, or logging out the client if the flag isn't set.
ramesh
Profile Joined November 2011
United States1 Post
November 13 2011 05:33 GMT
#12
Thank you. I am glad that i found this blog online. I was very impressed with the blog posting here about the topic.

We have an application in prod environment in our organization such as a server/client program in Java using RMI. Both server and client/s uses a Timer to ping each other at regular interval. If either one does not receive a reply when ping each other then after reaching a limit (> ping interval + tolerance), they end up disconnecting each other. In that process, the RMI server knocks out all other clients at certain times. Things seems to working file until a year back but after that the user base moved to a new building. Since then, we have noticed few network issues in the infrastructure and this particular application got effected very badly such that the application outage has been recurring once/twice per week. I have inherited this application code and maintenance from a vendor after i joined the organization. Recently we migrated the database part of the application to Oracle RAC and that effected some of the queries to take longer time than they were before. Ironically, all these issues are being surfaced only in prod environment but not in Test/Dev environment. It's been extremely challenging to resolve the issues. I would truly appreciate if someone provide me some guidance to resolve this issue.

Since past 2 days, 3 of the use case scenarios seems to be taking longer time to finish in the database and by that time, Socket Timeout (set to 15 sec) is being reach in each of the scenario. To our knowledge, we couldn't find any issue with the database sqls but we started looking into those to find root cause. In the meantime, i thought of increasing RMI Server Socket Timeout to 5min as interim solution.

Does this change have any side effects in this client/server model?

Please advise.

Thanks
Ram
MisterD
Profile Blog Joined June 2010
Germany1338 Posts
Last Edited: 2011-11-13 11:29:48
November 13 2011 11:28 GMT
#13
timeouts are usually used for error cases, so increasing the timeouts *should* not change anything for the normal program flow. however, as every engineer knows, changing anything can break everything. ;P

of course a "nicer" solution would be to use multithreading, as to still be able to reply to pings while the database is working. that is however considerably more work, which might not be justified depending on what your further plans with said application are.

/edit: oh and also the same goes for you, better post on stackoverflow.com for instance. this is not really a programmer help forum here, although quite a few programmers frequent it.
Gold isn't everything in life... you need wood, too!
Please log in or register to reply.
Live Events Refresh
Next event in 11h 20m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
PiGStarcraft221
StarCraft: Brood War
Britney 11828
Artosis 230
Dewaltoss 75
Aegong 50
NaDa 7
Dota 2
monkeys_forever374
Other Games
Grubby5025
tarik_tv4708
summit1g2199
Liquid`RaSZi1463
shahzam422
uThermal210
C9.Mang0183
Liquid`Hasu152
ToD95
ArmadaUGS70
UpATreeSC57
ZombieGrub42
Organizations
Other Games
BasetradeTV423
Dota 2
PGL Dota 2 - Main Stream25
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
[ Show 14 non-featured ]
StarCraft 2
• Reevou 11
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• masondota21132
League of Legends
• imaqtpie2140
Other Games
• Shiphtur390
Upcoming Events
GSL
11h 20m
SHIN vs Zoun
ByuN vs herO
OSC
12h 50m
OSC
14h 50m
Replay Cast
1d 1h
Escore
1d 11h
The PondCast
1d 11h
WardiTV Invitational
1d 12h
Zoun vs Ryung
Lambo vs ShoWTimE
Big Brain Bouts
1d 17h
Fjant vs Bly
Serral vs Shameless
OSC
1d 23h
Replay Cast
2 days
[ Show More ]
CranKy Ducklings
2 days
RSL Revival
2 days
SHIN vs Bunny
ByuN vs Shameless
WardiTV Invitational
2 days
Krystianer vs TriGGeR
Cure vs Rogue
uThermal 2v2 Circuit
2 days
BSL
2 days
Replay Cast
3 days
Sparkling Tuna Cup
3 days
RSL Revival
3 days
Cure vs Zoun
Clem vs Lambo
WardiTV Invitational
3 days
BSL
3 days
GSL
4 days
Afreeca Starleague
4 days
Soma vs Leta
Monday Night Weeklies
4 days
CranKy Ducklings
5 days
Afreeca Starleague
5 days
Light vs Flash
Replay Cast
6 days
Liquipedia Results

Completed

Proleague 2026-05-05
WardiTV TLMC #16
Nations Cup 2026

Ongoing

BSL Season 22
ASL Season 21
CSL 2026 SPRING (S20)
IPSL Spring 2026
KCM Race Survival 2026 Season 2
Acropolis #4
YSL S3
SCTL 2026 Spring
RSL Revival: Season 5
2026 GSL S1
BLAST Rivals Spring 2026
IEM Rio 2026
PGL Bucharest 2026
Stake Ranked Episode 1
BLAST Open Spring 2026
ESL Pro League S23 Finals
ESL Pro League S23 Stage 1&2
PGL Cluj-Napoca 2026

Upcoming

Escore Tournament S2: W6
KK 2v2 League Season 1
BSL 22 Non-Korean Championship
Escore Tournament S2: W7
Escore Tournament S2: W8
CSLAN 4
Kung Fu Cup 2026 Grand Finals
HSC XXIX
uThermal 2v2 2026 Main Event
Maestros of the Game 2
2026 GSL S2
Stake Ranked Episode 3
XSE Pro League 2026
IEM Cologne Major 2026
Stake Ranked Episode 2
CS Asia Championships 2026
IEM Atlanta 2026
Asian Champions League 2026
PGL Astana 2026
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.