高并发情况下锁引发的故障

故障现象:某应用服务器不定时的因为响应时间超时而报警,但是很快又超时接触,回复正常。

原因分析:程序中的某个单例对象中多处使用了synchronized(this),由于tihs对象只有一个,所有的并发请求都要排队获取这把唯一的一把锁。一般情况下,都时一些简单操作,获得锁,迅速完成操作,释放锁,不会引起线程排队。但是某个需要远程调用的操作也被加了synchronized(this),这个操作只是偶尔被执行。但是每次执行都要花很长的时间,这段时间锁被占用,所有的用户线程都要等待,响应超时,这个操作执行完后释放锁,其他线程迅速执行,超时解除。

经验教训:使用锁操作要谨慎。特别是对synchronized关键字的使用。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s