经过昨天的再次日志的详细记录,把线程处理中的请求包记录下来,发现有比较大的共性,那就是出问题的请求都是用户登录的请求,后台仔细检查这个请求的处理过程,发现有一个大问题在里面:
1。应用程序在特定的配置下,会记录下每个用户的登录信息(不只是当前用户,而是登录过的所有用户)
2.在新用户登录的时候,会检查1中记录的所有用户信息的状态
这样就造成一个大问题了,随着用户的不断登录登出,程序中积累的用户信息越来越多,而如果这时候同时有大量用户登录,每次登陆的时候都去循环检查所有用户信息,这样需要做的工作就巨大无比了。
现在的改进是:
1.改每次用户登录检查为每隔30秒循环检查
2.清理不需要的用户信息,避免出现保存的用户信息量过大。
3.使用线程安全的map对象做数据保存
结果:
今日的用户数量和前几天差不多,高峰的时候也是平均并发3000多,一整天没有出现任何问题。基本确认就是该问题导致的。