Java开发之Tomcat配置

标签: Java 分类: 后台服务 创建时间:2020-10-28 08:42:14 更新时间:2023-10-20 11:23:26

1.tomcat莫名其妙的挂掉

查看/var/log/messages文件,找到了内存溢出异常,进程被杀死的问题。

1
2
3
4
5
6
7
## 查看tomcat进程
ps -f |grep tomcat

## 查看日志
vim /var/log/messages

cat /var/log/messages | grep -C 5 'Out of memory'

还有一个奇怪的地方,就是使用:ps -aux | grep java 命令时,有一个很长的java进程在运行,但是实际上这个进程不是tomcat进程。

参考文章:
1.linux中查看java进程 (这里写的比较简单)
2.Linux Tomcat 查看OOM之死by oom-killer
3.详解关于 tomcat进程消失(被杀)问题 (只是分析了原因,但是没有给出具体的解决方案)
4.Java实现Linux下服务器程序的双守护进程 (这里是写了代码实现的,不采取)
5.Tomcat 8在CentOS 7的守护进程设置 (这里讲了一个Jsvc的程序,没有测试,但是感觉没有什么特殊的地方)
6.tomcat监听tomcat挂掉重启(shell脚本) (这里使用了定时任务的方式)

2.定时任务脚本

(1) 根据参考文章,然后自己改了部分内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh

##读取环境变量
source /etc/profile
source ~/.bash_profile
#获取目录
basePath="/usr/local/tomcat-9.0.34"
#查找此目录所有带tomcat的文件夹
echo ""
echo "####################begin check####################"
#根据目录查看是否已启动
if [ -z "$(ps -ef|grep $basePath |grep java)" ];then
echo "tomcat is not run!"
#后台重启tomcat
/bin/bash $basePath/bin/startup.sh &
echo `date +'%Y-%m-%d %H:%M:%S'` "tomcat start!" >> check.log
fi
echo "####################end check####################"
echo ""

注意
1.其中的 /bin/bash不能写成sh,否则脚本无法执行。
2.basePath为tomcat的安装路径


(2) 编写crontab任务,每分钟执行一次

1
2
3
4
5
6
7
8
9
10
11
12
## 赋予脚本执行权限
chmod 777 check.sh
## 输入命令
crontab -e

## 文件中添加定时任务,每分钟执行一次检查
*/1 * * * * sh ~/check.sh

## 保存后退出即可,crontab实时刷新的

## 查看定时任务
crontab -l
参考文章:
1.linux tomcat挂了自动重启 (这个脚本有些简单,而且位置必须固定,所以需要更改)
2.Linux shell脚本之 if条件判断 (shell判断)
3.crontab无法执行脚本原因及解决方法 (crontab无法执行脚本的原因)

3.日志文件catalina.out

参考文章:
1.tomcat 8.5.9.0 解决catalina.out过大的问题 (使用log4j代替tomcat自带的日志系统)
2.catalina.out 和 catalina.log 的区别和用途 (日志文件的用途)
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。