`

tomcat死掉的问题

    博客分类:
  • web
阅读更多
做一个能活的时间长的web server还真是不容易,这不没几天,tomcat又死掉了。这次死掉的方式跟以往又不同,在catalina.out输出日志如下:
Dec 5, 2007 8:09:46 AM org.apache.tomcat.util.threads.ThreadPool logFull
SEVERE: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status

在网上搜了一下,也没看到啥原因,先按照提示说的,把maxThreads增加试试。要说系统压力很小,不明白为啥就不响应了。
分享到:
评论
2 楼 fishyych 2008-01-05  
总算解决这个问题了 问题其实可以分为2个:1个是如何避免数据库锁定的问题;另一个是如何让失败以后具有自动的恢复能力。
数据库锁定的问题可以通过单独启动一个进程来执行quartz。
对于transaction失败后无法自行恢复,我发现是由于我在web里面单独启动了一个线程,web的controller接收到日志以后,放到缓存当中,由日志处理线程来处理。但是由于数据库的锁定造成日志处理线程失败,该线程就没法恢复了。解决方法就是去掉线程,直接在controller中进行处理。
看来在web容器当中使用线程还是要非常小心的。本意是提高性能,反而带来了隐患。
1 楼 fishyych 2007-12-13  
经过日志跟踪,发现出现上述问题是在晚上Quartz线程执行的时候,日志处理线程报错:
2007-12-11 00:26:04,125 [appfuse] WARN [Thread-3] JDBCExceptionReporter(71) | SQL Error: 1205, SQLState: 41000
2007-12-11 00:26:04,126 [appfuse] ERROR [Thread-3] JDBCExceptionReporter(72) | Lock wait timeout exceeded; try restarting transaction
Exception in thread "Thread-3" org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access; nested exception is org.hibernate.exception.GenericJDBCException: could not insert: [org.appfuse.userlog.model.LogDetail]
Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [org.appfuse.userlog.model.LogDetail]
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2093)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2573)
        at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:47)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)

原来在执行quartz线程的时候,数据库被锁定了,所以日志线程访问数据库失败了,失败以后本身没有错误恢复能力,里面还有个bug造成资源被锁定,就把所有的tomcat线程都占满了。
如何避免数据库锁定的问题?我尝试配置dbcp连接池,最后发现不是这个问题。
目前还在尝试中~~~

相关推荐

    如何安装监控tomcat服务_防止tomcat死掉系统无法服务的问题

    标题和描述中提到的问题主要涉及如何安装监控Tomcat服务,以防止Tomcat因故障而停止服务,导致系统不可用。以下是对这些知识点的详细说明: 1. **Tomcat监控服务**: - 安装Tomcat监控服务是为了实时检查Tomcat...

    Shell脚本定时监控tomcat,服务挂掉自动重启

    Shell脚本定时监控tomcat,服务挂掉自动重启

    windows服务器下监控tomcat系统服务运行/重启

    2.20秒执行一次,如果对应的tomcat服务崩溃宕机,会自动重启 3.会生成一个日志文件 restart_service.txt 记录宕机重启时间 4.只需要修改checkTomcatServer.bat中的_task和_svr,不需要引号 5.会自动生成一个start.bat...

    Linux下Tomcat的启动、关闭、杀死进程

    ### Linux下Tomcat的启动、关闭、杀死进程 在Linux环境下管理Apache Tomcat服务器是非常常见的运维操作之一。本文将详细介绍如何在Linux系统中启动、关闭以及强制终止(杀死)Tomcat进程。 #### 一、启动Tomcat ...

    linux 启动 Tomcat 命令

    - 日志中显示第一次尝试杀掉进程并未成功,第二次再次尝试: ```bash java: no process killed ``` - 表明此时已无Java进程运行。 #### 六、总结 通过上述步骤,我们详细了解了在Linux环境下如何启动与停止...

    tomcat进程不能完全关闭的处理办法.txt

    tomcat shutdown后,进程还存在linux系统中的解决办法

    Tomcat监控程序

    Tomcat监控程序。这是一个vbs程序,只要双击运行,改程序就能监控网站访问,如果访问不到,自动重启Tomcat。用于解决项目运行时,Tomcat不定时死掉的情况。

    tomcat自动重启脚本

    需要手动配置部署的Tomcat路径,根据Tomcat名称检查进程是否存在,不存在直接启动,存在先杀死进程然后启动

    tomcat停起脚本.txt

    - 最后使用`awk '{print $2}'`提取出每个匹配项的第二列(即进程ID),并通过`kill -9`杀死这些进程。 - **`start()`函数**:该函数负责启动Tomcat服务。 ```bash function start() { cd $proc_dir ./...

    tomcat内存溢出问题解决经历

    前一段时间提交了一个产品版本给测试人员测试,测试结果简直出人意料! 测试一段时间后页面就卡死了,当时根据这个现象下意识的怀疑是...那就先解决下tomcat关不掉的问题吧,百度…检查代码…几十分钟后找到了,在tomc

    JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).pdf

    通过命令行操作,下载并解压Tomcat的安装包,然后配置tomcat-users.xml文件设置管理用户,并在context.xml中注释掉一些可能引起安全风险的配置。通过修改Connector配置来设定最大线程数(maxThreads)、最小空闲线程数...

    Tomcat防死机重启小工具

    参考网上程序做的一个防止Tomcat服务器死掉重启的程序,界面是用swing画的,有配置、日志、以及重启等功能。。。 要求: 1.tomcat必须能通过startup.bat启动,且名称为tomcat7.exe(注册成服务就好了) 2.必须自带...

    CentOS下停止Tomcat运行脚本代码

    然而,在进行维护或者更新时,经常需要停掉正在运行的Tomcat服务。本文将详细介绍如何在CentOS下编写并使用一个有效的脚本来停止Tomcat服务。 #### 脚本概述 脚本的主要功能分为三个阶段:查找Tomcat进程、尝试...

    解决应用启动失败但tomcat不报错的方法

    然而,有时候我们可能会遇到一种棘手的问题:应用启动失败,但Tomcat并未显示任何明显的错误信息,这给问题定位带来了挑战。本篇文章将详细探讨如何解决这种“应用启动失败但Tomcat不报错”的情况。 首先,我们需要...

    windows守护进程,开机自动重启,进程监测

    因为控制台程序出现过因为连接第三方服务超时直接挂掉(此时负载少了一个节点)以及服务器出现意外重启问题(该服务器所有节点宕机),所以需要一个进程守护程序。 也找过 现场的脚本、python的程序、pm2守护方式,...

    线上排查思路,一些关于服务器排查的命令与案例

    下面将针对磁盘不足、CPU 过高和 Tomcat假死三种常见的问题进行排查思路和命令案例的讲解。 1. 磁盘不足 当磁盘不足时,应用会抛出异常。排查思路包括: 1.1.2.1 利用 df 查询磁盘状态,结果是: ``` df -h ``` ...

    jenkins 部署启动项目后 杀死子进程

    前言 最近在鼓捣 jenkins 的时候,遇到了很多问题,这个...正如题目写的,就是 jenkins 在构建结束之后,会杀死它创建的子进程,所以你写的后台执行的脚本也会被kill掉。 方案一: # 在执行的脚本前边加入:不要杀

    杀除自己之外的别的java进程

    使用java调用命令行的方式查杀进程,可以杀死除自己之外的java进程

    session一致性.docx

    基于Nginx进程死掉的主从切换配置** 在Nginx出现故障时,需要有一种机制能够快速识别并切换到备份服务器。这通常通过监控Nginx进程的状态并配置自动恢复来实现。例如,当主Nginx进程停止时,Keepalived会触发脚本...

Global site tag (gtag.js) - Google Analytics