Tomcat多线程紊​乱​?

jAmEs_ 2014-04-16 03:05:04
最近遇到这样的问题,在高并发(可能也不是算很高,但是相对平常高,大概同一时段200个访问,但是由于客户端的时间有些诧异,就当30秒内有200个并发)情况下,好像出现多线程紊​乱​的情况,网上找到一个这样的文章
http://wenku.baidu.com/link?url=W1W39enJv15dvg7sT2BM8JoLiPzclfy868kNRvs2i0W9IBBmBYq2Wbc3_-i6Lks8TwTUuaSwvyNYonpyjEIQPMnIaOb66Z424419zURttny
具体的表现是,已经在这些代码增加步骤的跟踪日志,如果正常可能是每个访问都是1=>2=>3=>4=>5=>6这样的顺序,但是实际发生的情况是,部分访问是1=>2=>6,或1=>2=>3=>6这样无序的记录,所以怀疑多线程紊​乱了。
看看有没有人有这样的经验,帮忙解决,非常感谢!!!!
...全文
332 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2014-04-30
  • 打赏
  • 举报
回复
引用 10 楼 jAmEs_ 的回复:
现在: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>6(E用户的6,日志有输出用户信息) C用户:1=>2=>3=>6(F用户的6,日志有输出用户信息) D用户:1=>2=>3=>4=>5=>6 ...
意思是说,代码有无可能是: logger.log("1"); ... logger.log("2"); try { ... logger.log("3"); ... logger.log("4"); ... logger.log("5"); ... } catch (Exception ex) { // do nothing } logger.log("6"); 上述情况的异常控制则可能发生你所述的日志情况,所以我的建议是改为: try { // doing 1 } catch (Exception ex) { // do nothing } finally { logger.log("1"); } try { // doing 2 } catch (Exception ex) { // do nothing } finally { logger.log("2"); } try { // doing 1 } catch (Exception ex) { // do nothing } finally { logger.log("3"); } 当然如果确定没有上述异常处理机制则另当别论了。 另一种可能问题则是所使用日志输出组件是否存在配置不当等问题。这个可以尝试临时替换掉 logger,改为自己写的一个logger方法,直接把日志输出到一个自己指定的文件中(并同时让原logger也输出一份),再检查你自己所输出的这个文件是否会出现问题。
jAmEs_ 2014-04-21
  • 打赏
  • 举报
回复
引用 7 楼 losebaby 的回复:
楼主用的是JSP做的吗?
使用SSH
jAmEs_ 2014-04-21
  • 打赏
  • 举报
回复
补充: 应该出现下面情况: 正常: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>3=>4=>5=>6 C用户:1=>2=>3=>4=>5=>6 D用户:1=>2=>3=>4=>5=>6 ... 现在: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>6(E用户的6,日志有输出用户信息) C用户:1=>2=>3=>6(F用户的6,日志有输出用户信息) D用户:1=>2=>3=>4=>5=>6 ...
jAmEs_ 2014-04-21
  • 打赏
  • 举报
回复
1. 不是用户操作,是程序执行过程增加日志,是多个用户同时访问tomcat,然后tomcat按代码执行,类似下面代码,当然execute存在多个函数调用,也不是只有1个函数,但是这个不是关键,我可以说,自己已经确定步骤1=>6,中途异常也就按2的情况。 class Action{ public String execute() { ... logger.log("1"); ... logger.log("2"); ... logger.log("3"); ... logger.log("4"); ... logger.log("5"); ... logger.log("6"); } } 因中途可能会出现OOM,我也只是网上找到一个相关性的文章,并不一定是一样的情况,只能说可能tomcat真的存在这样的BUG? 2. 你当我已排程异常造成问题。 如果是异常,按代码应该是会: 正常: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>3=>4=>5=>6 C用户:1=>2=>3=>4=>5=>6 D用户:1=>2=>3=>4=>5=>6 ... 现在: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>Exception C用户:1=>2=>3=>Exception D用户:1=>2=>3=>4=>5=>6
可乐罐 2014-04-18
  • 打赏
  • 举报
回复
楼主用的是JSP做的吗?
MiceRice 2014-04-18
  • 打赏
  • 举报
回复
问题描述的还是不够清晰,你给的链接只是说在OOM的情况下可能出现紊乱,但跟你说的紊乱效果也不尽相同。 ◎ 你是如何保证 某用户:1=>2=>3=>4=>5=>6 这一执行过程的? 是同一个线程连续执行这六个动作? 还是形成6个任务在线程池中执行? 还是用户自己操作6次? ◎ 有无捕获所有可能出现异常的地方,换个问法:日志记录动作都放在最外层的 finally 里面了么?
jAmEs_ 2014-04-17
  • 打赏
  • 举报
回复
自己顶,每次问的问题都没人能解答,没劲
jAmEs_ 2014-04-17
  • 打赏
  • 举报
回复
我说的多线程不需要我控制,是tomcat本身的多线程,程序本身不需要多线程控制。
  • 打赏
  • 举报
回复
不应该是多线程运行紊乱,可能是多线程同步问题,没处理好
jAmEs_ 2014-04-16
  • 打赏
  • 举报
回复
正常: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>3=>4=>5=>6 C用户:1=>2=>3=>4=>5=>6 D用户:1=>2=>3=>4=>5=>6 ... 现在: A用户:1=>2=>3=>4=>5=>6 B用户:1=>2=>6 C用户:1=>2=>3=>6 D用户:1=>2=>3=>4=>5=>6 ... 我也觉得可能性不高,但是确实发生了。
sugar6234 2014-04-16
  • 打赏
  • 举报
回复
这不太可能吧,不明白怎么个紊乱法
jAmEs_ 2014-04-16
  • 打赏
  • 举报
回复
补充: 日志是通过log4j实现,其中设置了输出线程信息: %t: 输出产生该日志事件的线程名 在日志里面发现有时同一个线程名称会变成不同的访问标志(正常1个访问1个访问标志)

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧