检测tomcat运行状态
tomcat常见的错误与解决方案小结

tomcat常见的错误与解决⽅案⼩结⼀、tomcat启动时错误问题1:The JAVA_HOME environment variable is not defined This environment variable is needed to run this program;解决:没有在tomcat的配置⽂件.bash_profile中设置环境变量JAVA_HOME,具体设置⽅法为:加⼊如下⼏⾏:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jarexport CLASSPATH问题2:Error occurred during initialization of VM Could not reserve enough space for object heap解决:在tomcat的bin⽬录下,catalina.sh⽂件的tomcat内存参数配置过⼤,超过机器可⽤内存总数造成,修改到适当的值即可,修改的参数为:JAVA_OPTS="-Xms50m -Xmx60m"问题3:tomcat启动时报某个⽬录没有权限,启动失败,或者不能执⾏某些jsp页解决:tomcat需要tomcat⽤户具有⼀些⽬录和⽂件的相应权限, 所有⽬录应该具有读写执⾏(浏览)的权限,jsp,class⽂件应该最少具有读权限, ⼀些⽂件需要写权限,下⾯是已知的需要读写权限⽂件的列表:$CATALINA_HOME/logs下所有⽂件$CATALINA_HOME/work下所有⽂件$CATALINA_HOME/publish/main/count.txt⽂件$CATALINA_HOME/publish/chatroom/resource下的所有.xml⽂件所有上传图⽚⽬录都需要写权限。
tomcat connectiontimeout 单位

tomcat connectiontimeout1. 概述Tomcat是一个流行的Java Servlet容器,用于支持Java应用程序的部署和运行。
connectionTimeout是Tomcat配置文件中的一个重要参数,用于设置客户端的连接超时时间。
在本文中,我们将深入探讨Tomcat connectionTimeout的含义、使用方法以及如何优化和调整它以提高应用程序的性能和可靠性。
2. connectionTimeout的作用connectionTimeout参数指定了客户端与服务器之间的连接超时时间。
当客户端连接到Tomcat服务器时,如果在指定的时间内没有完成与服务器的握手,连接将被视为超时并关闭。
该参数的默认值为10000毫秒(即10秒),可以根据特定的应用程序需求进行配置。
连接超时是一个重要的设置,它对于大量访问的网站来说尤其重要。
如果连接超时时间设置得太短,可能会导致客户端无法与服务器建立连接,从而影响用户的访问体验。
而如果连接超时时间设置得太长,可能会导致服务器资源的浪费和潜在的安全风险。
因此,我们需要根据实际情况来合理设置connectionTimeout参数。
3. connectionTimeout的配置3.1 在server.xml中配置Tomcat的配置文件server.xml中包含了connectionTimeout参数的配置。
在<Connector>元素中,可以通过添加属性connectionTimeout来设置连接超时时间。
下面是一个示例配置:<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="5000"redirectPort="8443" />在上述示例中,connectionTimeout被设置为5000毫秒,即5秒。
重启tomcat服务的方法

重启tomcat服务的方法在重启Tomcat 服务之前,你需要先停止当前正在运行的Tomcat 服务,然后再重新启动服务。
以下是在不同操作系统上重启Tomcat 服务的方法:在Windows 操作系统上:1. 打开命令行终端:按下“Win + R”组合键,打开“运行”对话框,输入“cmd”并按下“Enter”键,打开命令行终端。
2. 停止Tomcat 服务:在命令行终端中输入以下命令,停止当前正在运行的Tomcat 服务:C:\path\to\tomcat\bin\shutdown.bat其中,“C:\path\to\tomcat\”是你的Tomcat 安装目录。
3 等待服务停止:等待几秒钟,直到命令行终端输出“INFO: Server shutdown completed.”的消息,表示Tomcat 服务已经停止。
4. 启动Tomcat 服务:在命令行终端中输入以下命令,启动Tomcat 服务:C:\path\to\tomcat\bin\startup.bat等待几秒钟,直到命令行终端输出“INFO: Server startup in XXX ms”的消息,表示Tomcat 服务已经启动。
在Linux 或macOS 操作系统上:1. 打开终端:打开终端程序,可以在启动菜单或者应用程序中找到。
2. 停止Tomcat 服务:在终端中输入以下命令,停止当前正在运行的Tomcat 服务:/path/to/tomcat/bin/shutdown.sh其中,“/path/to/tomcat/”是你的Tomcat 安装目录。
3. 等待服务停止:等待几秒钟,直到终端输出“INFO: Server shutdown completed.”的消息,表示Tomcat 服务已经停止。
4. 启动Tomcat 服务:在终端中输入以下命令,启动Tomcat 服务:/path/to/tomcat/bin/startup.sh等待几秒钟,直到终端输出“INFO: Server startup in XXX ms”的消息,表示Tomcat 服务已经启动。
tomcat 中pause用法

tomcat 中pause用法Tomcat是一个常用的Java Web服务器,它用于托管和运行Java Servlet 和JavaServer Pages(JSP)应用程序。
在Tomcat的运行过程中,有时我们需要暂停(Pause)服务器的运行。
本文将通过一步一步的方式介绍Tomcat中Pause的用法。
第一步:了解Pause的作用和必要性Pause是指临时停止服务器的运行,以便进行一些必要的操作,比如修改配置文件、更换Web应用或进行系统维护等。
在某些情况下,我们需要暂时关闭Tomcat,但又不希望完全停止服务器。
在这种情况下,Pause 就是一个非常有用的功能。
第二步:使用命令行方式进行Pause在Tomcat的安装目录下,有一个名为catalina.sh(Unix/Linux)或catalina.bat(Windows)的脚本文件,在该文件中,我们可以找到Pause 的相关命令。
可以通过以下步骤来实现Pause:1. 打开一个终端(Unix/Linux)或命令提示符(Windows),进入Tomcat 的bin目录。
2. 运行catalina.sh(Unix/Linux)或catalina.bat(Windows)脚本文件。
3. 在终端或命令提示符上,输入以下命令:- Unix/Linux:./catalina.sh stop -p- Windows:catalina.bat stop -p这些命令将触发Tomcat的暂停功能,并停止接受新的请求,但会继续处理已接收的请求,直到处理完毕。
第三步:使用可视化界面方式进行Pause除了命令行方式,我们还可以通过Tomcat管理界面来实现Pause的功能。
以下是使用可视化界面方式进行Pause的步骤:1. 打开Web浏览器,输入Tomcat的管理界面URL(通常为2. 输入有效的管理员用户名和密码,登录Tomcat管理界面。
3. 在管理界面上,找到并点击"Server Status"(服务器状态)选项。
Tomcat下运行asp的解决方案

tomcat是不能直接跑asp的,解决方案:整合IIS和Tomcat(同时支持ASP和jsp)花了很久时间,终于搞定了IIS6和Tomcat的整合。
现在把步骤贴出来给各位一点参考,也免去了新手在Google上暴走和一次次的调试。
开始吧!首先先说明我的系统,Windows 2003 Server中文版+IIS6+Tomcat5.0.14,JDK 1.4.2安装目录为C:JDK,Tomcat安装目录为C:Tomcat,环境变量JAVA_HOME和TOMCAT_HOME都已设置好并指向其各自的安装目录。
(注意,接下来所有文件中涉及到tomcat路径的请自行修改为自己的Tomcat路径) Tomcat5和IIS6的安装我就不说了,网上的文档很多,假定此时我们已经安装好了Tomcat5和IIS6并都能独立运行,两者的默认网站均指向C:web目录。
现在我们要做的是到/dist/jakarta/tomcat-connectors/jk2/binaries/win32/ jakarta-tomcat-connectors-jk2.0.2-win32-IIS.zip去下载JK2,由JK2负责IIS和Tomcat的通讯,解开后得到isapi_redirector2.dll,我把它放在了C:tomcatiis下(目录随便)。
接下来在Tomcat安装目录下的conf目录下建一个workers2.properties文件,把下面这段东东拷进去保存。
注意file=".."之中的路径要用"/"哦![shm]file=c:/Tomcat/logs/jk2.logsize=1048576# 实际运用时把所有的localhost和8009换成你自己的IP和端口[channel.socket:localhost:8009]port=8009host=localhost# define the worker[ajp13:localhost:8009]channel=channel.socket:localhost:8009# Uri mapping[uri:/*.jsp][uri:/web/*]worker=ajp13:localhost:8009# define the worker[status:status]# Uri mapping[uri:/jkstatus/*]worker=status:status之后编辑jk2.properties文件,确认其中是否有此一句:request.tomcatAuthentication=false接下来开始编辑注册表,直接建一个iis.reg文件,把下面一段拷进去保存然后双击iis.reg把信息导入注册表。
Tomcat(8005,8080,8009)端口占用问题常见原因及解决方法

在企业版Eclipse中,在已经启动了Tomcat服务器后,准备运行页面或Servlet时,有时会出现这样的关于Tomcat服务器端口占用的问题:“Several ports (8005, 8080, 8009) required by Tomcat v6.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).”错误信息的大意是说Tomcat运行所需的那三个端口被被的程序占用了。
我个人遇到过的的原因大概有以下几种:情况一:点击运行的时候没有选中页面或Servlet窗口的标签情况如下图:仔细观察可知,左图其实并没有选中要运行的Servlet窗口的标签,因为标签是白色的,此时点击运行按钮的话相当于再启动一个服务器进程,端口当然是被原来那个已经启动的服务器给占了。
而右图中Servlet窗口标签是蓝色的,说明已经被选中了,点击绿色的运行按钮后自然就是将这个Servlet装入已经启动的那个服务器运行,所以不会有像刚才那种端口占用的情况。
情况二:在硬盘的两个地方都有Tomcat下面说说我碰到过的另一种情况,以前在D盘安装过一个Tomcat,后来因为有段时间不怎么用,就忽略了。
再后来又开始做练习的时候,在C盘装了另一个Tomcat,并且在Eclipse中配置的时候也是默认选择了C盘的那个Tomcat。
悲剧的是,因为原来在D盘的那个Tomcat我设成了开机启动,所以端口一开始就被它占着。
因此,在Eclipse中启动Tomcat(C盘那个)时,就出现了端口占用的错误提示。
Linux服务启动端口相关命令

Linux服务启动端⼝相关命令查看服务运⾏状态:service 服务名 status启动服务:service 服务名 start停⽌服务:service 服务名 stop重启服务:service 服务名 restarttomcat服务:启动 sudo /home/wy/tools/bin/start_tomcat.sh /home/wy/www/应⽤名关闭 sudo /home/wy/tools/bin/stop_tomcat.sh /home/wy/www/应⽤名重启服务 sudo /home/wy/tools/bin/restart_tomcat.sh /home/wy/www/应⽤名查看某个服务是否启动ps -ef | grep 服务名(ps命令是Process Status的缩写)UID PID PPID C STIME TTY TIME CMDzzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto daeUID :程序被该 UID 所拥有PID :就是这个程序的 IDPPID :则是其上级⽗程序的IDC :CPU使⽤的资源百分⽐STIME :系统启动时间TTY :登⼊者的终端机位置TIME :使⽤掉的CPU时间。
CMD :所下达的是什么指令关闭服务前,可先切换到root账户,再执⾏关闭命令:sudo -ssudo /home/wy/tools/bin/stop_tomcat.sh /home/wy/www/应⽤名netstat -tunlp:⽤于显⽰tcp,udp的端⼝和进程等相关情况。
netstat -tunlp|grep 端⼝号:⽤于查看指定端⼝号的进程情况,如查看22端⼝的情况,netstat -tunlp|grep 22。
DEBUG和INFO的使用

DEBUG和INFO的使⽤Tomcat下的log⽇志级别1. 等级:DEBUG<INFO<WARN<ERROR<FATAL;2. 区别:2.1 DEBUG,主要⽤于在调试时更详细的了解系统运⾏状态2.2 INFO,重要的输出信息,⽤来反馈系统的当前状态给最终⽤户的;**WARN,ERROR,FATAL,分别是警告、错误、严重错误,这三者是系统运⾏时检测到了⼀个不正常的状态。
**2.3 WARN, 可修复,系统可继续运⾏下去;2.4 ERROR, 可修复性,但⽆法确定系统会正常的⼯作下去;2.5 FATAL, 相当严重,可以肯定这种错误已经⽆法修复,并且如果系统继续运⾏下去的话后果严重。
3. 使⽤:什么时候使⽤ INFO, WARM, ERROR,FATAL?3.1 INFO⽤于打印程序应该出现的正常状态信息,便于追踪定位;3.2 WARM表明系统出现轻微的不合理但不影响运⾏和使⽤;3.3 ERROR表明出现了系统错误和异常,⽆法正常完成⽬标操作。
3.4 FATAL表明出现了⽆法修复的错误,并且如果系统继续运⾏下去的话,必然会越来越乱。
出现FATAL时,采取的最好的措施不是试图将系统状态恢复到正常,⽽是尽可能地保留系统有效数据并停⽌运⾏。
4. ⽰例:/*** <p>Title: ⽤户登录处理</p>* <p>Description: </p>* @param loginId* @return redirect page*/@RequestMapping("/user/login.vw")public String login(HttpServletRequest request, HttpServletResponse response, ModelMap model,@ModelAttribute("login") @Validated CusLogin login,BindingResult bindingResult) throws Exception {log.debug("⽤户登录开始......");// 检查登录信息对象:null判断if (null == login) {log.error("⽤户登录失败-登录信息不存在");bindingResult.addError(new FieldError(ERNOTEXIST[0],ERNOTEXIST[0],ERNOTEXIST[1]));request.getSession().setAttribute(LOGINSTATE, "1");login = new CusLogin();// 1代表登录时⽤户输⼊的信息有误login.setLoginState("1");login.setPasswd("");model.addAttribute("login", login);return INDEX;}// 字段格式检查if (bindingResult.hasErrors()) {List<ObjectError> ers = bindingResult.getAllErrors();for (ObjectError e : ers) {log.error(e.getDefaultMessage());}//has errorlog.error("⽤户登录失败-请求参数错误;username=" + login.getLoginNm());//redirect index.jsprequest.getSession().setAttribute(LOGINSTATE, "1");login.setLoginState("1");login.setPasswd("");model.addAttribute("login", login);return INDEX;}// 第⼀登录失败,再次登录需输⼊验证码,判断验证码是否正确if("1".equals(request.getSession().getAttribute(LOGINSTATE))){if (login.getVerCode() == null || !login.getVerCode().equalsIgnoreCase(VerCodeMaker.verImgGet(session))) { VerCodeMaker.verImgDel(request);log.error("⽤户登录失败-验证码检查失败;username=" + login.getLoginNm());bindingResult.addError(new FieldError(ErrorMsg.VERCODEEROOR[0],ErrorMsg.VERCODEEROOR[0],ErrorMsg.VERCODEEROOR[1]));request.getSession().setAttribute(LOGINSTATE, "1");login.setLoginState("1");login.setPasswd("");model.addAttribute("login", login);return INDEX;}}try {//no error// 获取登录⽤户信息:条件为⽤户名和⽤户类型LoginUsersDto dto = loginService.login(login);if (null == dto || StringUtility.isEmpty(dto.getLoginName())) {bindingResult.addError(new FieldError(ERNOTEXIST[0],ERNOTEXIST[0],ERNOTEXIST[1]));log.error("⽤户登录-查询⽤户信息失败,不存在或DB数据错误;username=" + login.getLoginNm());request.getSession().setAttribute(LOGINSTATE, "1");login.setLoginState("1");login.setPasswd("");model.addAttribute("login", login);return INDEX;}// 密码检查boolean isPwdExist = loginService.passwordChk( dto.getLoginName(), login.getPasswd(), dto.getPassword()); if (!isPwdExist) {bindingResult.addError(new FieldError(ErrorMsg.PWDERROR[0],ErrorMsg.PWDERROR[0],ErrorMsg.PWDERROR[1]));request.getSession().setAttribute(LOGINSTATE, "1");login.setLoginState("1");login.setPasswd("");model.addAttribute("login", login);log.error("⽤户登录-密码检查失败;username=" + login.getLoginNm());return INDEX;}// 获取⽤户认证及⽀付信息PayAuthInfoDto payInfoDto = payService.getPayAuthInfoByCusCode(dto.getCusCode());// 创建SESSION数据User user = new User();if (null != payInfoDto) {user = erSet(dto , payInfoDto);} else {user = erSet(dto);}UserSession.setUser(request, user);log.debug("⽤户登录结束");} catch (BizException e) {("⽤户登录失败;username=" + login.getLoginNm(),e);bindingResult.addError(new FieldError(ErrorMsg.UNKNOWEXPCTION[0],ErrorMsg.UNKNOWEXPCTION[0],ErrorMsg.UNKNOWEXPCTION[1]));login.setPasswd("");model.addAttribute("login", login);return INDEX;} catch (Exception e) {("⽤户登录失败,username=" + login.getLoginNm(),e);bindingResult.addError(new FieldError(ErrorMsg.UNKNOWEXPCTION[0],ErrorMsg.UNKNOWEXPCTION[0],ErrorMsg.UNKNOWEXPCTION[1]));login.setPasswd("");model.addAttribute("login", login);return INDEX;} finally{request.getSession().removeAttribute(LOGINSTATE);}return REUSERINDEX;}5. 排查步骤:5.1 打开Tomcat⽂件中的logs⽂件夹,然后打开需要查找的⽂件,debug.log、info.log、error.log等;5.2 其中,每个⽇志⽂件是由时间和⼤⼩规则⽣成的;5.3 如⼀个项⽬的debug.log⽂件,是2019/7/10 11:48:00创建的,假设14:00,⽂件装满,⽐如说40M,那么就会保存为debug.log.1,并再⽣成⼀个debug.log⽂件以此类推;5.4 debug.log.1⽂件记录了11:48:00到14:00的⽇志信息;5.5 如打开debug.log⽂件,CTRL+F输⼊查找⽬标进⾏搜索定位;5.6 明确错误现象 -> 错误关键描述 -> 最终的错误原因。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题描述:
Tomcat 服务器经常出现宕机现象,不能及时发现,影响用户体验。
解决方案:
使用VBS检测tomcat的运行状态,若tomcat出现异常,则重启启动tomcat,并记录tomcat 异常代码和异常时间,结合项目日志去查找原因。
具体实现:
软件要求:
(1)安装Jdk1.7,设置环境变量。
JA V A_HOME:C:\Program Files\Java\jdk1.7.0_51
CLASSPATH:.;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\lib\tools.jar; (2)安装tomcat7在服务中产生Tomcat7服务
项目部署:
(3)把项目copy到安装版tomcat的webapps下
(4)配置数据源
(5)引用数据源
(6)制作VBS脚本
on error resume Next
Dim a
a = True
'data="restart tomcat7------------>"
set WshShell = WScript.CreateObject("WScript.Shell")
set fs =createobject("scripting.filesystemobject")
Do While a
set http = CreateObject("Microsoft.XMLHTTP")
http.open "GET","http://10.214.7.160/dataCenter/js/lib/tree.js",false http.send
'set ts1 =fs.opentextfile("e:\2.txt",8,true)
'ts1.write http.Status&now
'ts1.writeblanklines 1
'ts1.close
if http.Status > 299 then
set ts =fs.opentextfile("C:\TomcatMonitor.txt",8,true) WshShell.Run("net stop Tomcat7")
WScript.Sleep(30000)
WshShell.Run("net start Tomcat7")
ts.write "error code:"
ts.write http.Status
ts.write "-------error time:"
ts.write now
ts.writeblanklines 2
ts.close
end if
WScript.Sleep(60000)
Loop
调度任务:
(7)新建调度任务
注意事项:浏览器设置:
结果展示:
当tomcat因异常终止后,检测脚本自动执行脚本程序,并记录异常代码和异常发生时间。
当重启机器时或手动杀死tomcat7.exe线程时,检测程序同样会重启服务保证项目正常运行,提高系统稳定性,减少用户不便。