- Cannot enhance @Configuration bean definition 'mybatisConfigurer' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
学习网址:https://blog.csdn.net/u013202238/article/details/90315764
解决方法:修改方法为static或者修改注解为@Component 原因看学习网址
- centos清理文件脚本
创建删除日志文件:del_log.sh
表示删除3天/10分钟前的文件:
find /var/log/ -mtime +3 -name "trace_*.log" -exec rm -rf {} \;
#!/bin/sh
find /www/psd-import/uploads -type f -mmin +10 -name *.log -exec rm -rf {} \;
find 后面紧跟的是要查找的目录,. 表示当前目录
-type f: 指定查找对象为文件
-name *.log: 指定查找对象名称以.log结尾
-mtime +10: 查找10天以前的老文件
-mmin +10: 查找10分钟以前的老文件
-exec rm -rf {} ; :执行删除命令,这句注意,后面有个 {} ; 是必须的
14 nacos
启动:sh startup.sh -m standalone
日志过多:多数都是nacos中com.alibaba.nacos.client.naming路径打印,在配置文件中将该路径日志级别提升至error
解决办法:修改nacos\conf\nacos-logback.xml
<logger name="com.alibaba.nacos.client.naming" level="ERROR"/>
13.nginx
yum nginx install
niginx
增加pid .key .pem
修改
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
service iptables save
12.tomcat启动时错误:Failed to start component [StandardEngine[Catalina].StandardHost[localhost].错误
1、确认是否清除 Tomcat 缓存
tomcat/work目录下,执行 rm -rf Catalina
2、tomcat部署导致项目访问路径不正确
更改配置文件 /conf/server.xml
11.服务挂掉
1.更换war包位置到webapps同级,更换对应配置文件(没啥用)
2.服务启动两次(非bug,为了让端口号和不加端口号都能访问到,学习网址https://www.cnblogs.com/nuccch/p/6792931.html)
3.查看/usr/dev/tomcat/log unregister mbean error 注册问题(步骤8,可行)
4.查看/var/log/message 内存问题,把java加入运行内存白名单(不是这里问题,没有尝试)
5.检查代码,todo
6.开启网站健康状态检查监测 /actuator,在tomcat以监测点增加自启动脚本(可行)
springboot更改application.properties。
# management是所有actuator的配置
# 默认开启所有端点,后排除beans
management.endpoints.enabled-by-default=true
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=beans
线上服务器创建文件夹和脚本。编辑内容,更换路径和等待时间。给文件权限。增加crontab。
cd /
vim monitor_tomcat.sh
chmod 777 monitor_tomcat.sh
*/10 * * * * bash /monitor_tomcat.sh
shell文件:
#!/bin/sh
# func:自动监控tomcat脚本并且执行重启操作
# 获取tomcat进程ID(其中[grep -w '.....']中的.....需要替换为实际部署的tomcat文件夹名,如下)
TomcatID=$(ps -ef |grep tomcat |grep -w '/usr/dev/apache-tomcat-9.0.41'|grep -v 'grep'|awk '{print $2}')
# 获取同一个tomcat重复启动个数
TomcatCount=$( ps -ef |grep tomcat |grep -w '/usr/local/tomcat_autoupdate'|grep -v 'grep'|awk '{print $2}' |wc -l)
# tomcat启动程序(这里注意tomcat实际安装的路径)
StartTomcat=/usr/dev/apache-tomcat-9.0.41/bin/startup.sh
TomcatCache=/usr/dev/apache-tomcat-9.0.41/work
#定义要监控的页面地址
WebUrl=[http://ops.51xugu.com/actuator/health](网站地址/actuator/health)
#日志输出
GetPageInfo=/Users/mjl/tomcatMonitorLogs/tomcat_getPageInfo_monitor.log
TomcatMonitorLog=/Users/mjl/tomcatMonitorLogs/tomcat_MonitorLog_monitor.log
Monitor()
{
echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
if [[ $TomcatCount -gt 1 ]];then #这里判断Tomcat进程是否有重复启动,有重复启动则全部干掉
ps -ef |grep tomcat |grep -w '/usr/local/tomcat_autoupdate'|grep -v 'grep'|awk '{print $2}' | xargs kill -9
echo "同一tomcat开启开启 $TomcatCount 个进程,统统kill掉"
sleep 5
else
if [ $TomcatID ];then #这里判断Tomcat进程是否存在
echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
# 检测是否启动成功(成功的话页面会返回状态"200"),120秒无响应就不等待了
TomcatServiceCode=$(curl -s -o $GetPageInfo -m 120 --connect-timeout 120 $WebUrl -w %{http_code})
if [ $TomcatServiceCode -eq 200 ];then
echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常"
else
echo "[error]tomcat页面出错,请注意...状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
echo "[error]页面访问出错,开始重启tomcat"
kill -9 $TomcatID # 杀掉原tomcat进程
sleep 5
rm -rf $TomcatCache # 清理tomcat缓存
$StartTomcat
fi
else
echo "[error]tomcat进程不存在!tomcat开始自动重启..."
echo "[info]$StartTomcat,请稍候..."
rm -rf $TomcatCache
$StartTomcat
fi
fi
echo "--------------------------"
}
Monitor>>$TomcatMonitorLog
结果:
cat tomcat_getPageInfo_monitor.log
{"status":"UP"}
cat tomcat_MonitorLog_monitor.log
[info]开始监控tomcat...[2021-06-10 19:09:49]
[info]当前tomcat进程ID为:27665,继续检测页面...
[info]页面返回码为200,tomcat启动成功,测试页面正常
--------------------------
[info]开始监控tomcat...[2021-06-10 19:10:01]
[info]当前tomcat进程ID为:27665,继续检测页面...
[info]页面返回码为200,tomcat启动成功,测试页面正常
--------------------------
[info]开始监控tomcat...[2021-06-10 19:20:01]
[info]当前tomcat进程ID为:27665,继续检测页面...
[info]页面返回码为200,tomcat启动成功,测试页面正常
--------------------------
[info]开始监控tomcat...[2021-06-10 19:30:01]
[info]当前tomcat进程ID为:27665,继续检测页面...
[info]页面返回码为200,tomcat启动成功,测试页面正常
--------------------------
步骤二:需要去catalina.sh配置文件中添加jre.java环境路径才能生效,否则会报错:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
vim /etc/profile 找到JAVA_HOME 把路径记录下
vim /usr/local/tomcat/bin/catalina.sh 添加
[root@main bin]# cat catalina.sh
#!/bin/sh
export JAVA_HOME=/usr/local/jdk1.8.0_201
export JRE_HOME=/usr/local/jdk1.8.0_201/jre
10.命令行
cat /etc/redhat-release 查看centos版本
sh /usr/dev/tocmat/bin/startup.sh
9.内存泄漏
原因:@table类缺少主键设置
修改:加上
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private String userId;
8.unregister mbean error
原因:Tomcat中部署了两个web应用,启动时报错抛异常
效果:待定
修改Tomcat 下的/bin/catalina.sh的两种方法:
1.在最后面,不要放在前面或者中间的逻辑判断附近添加
set JAVA_OPTS="-Ddruid.registerToSysProperty=true"
2.在开头JAVA_OPTS添加
JAVA_OPTS="$JAVA_OPTS -Ddruid.registerToSysProperty=true"
或者可通过自定义设置spring的jmx,完成mbean的生成
原因:同一个domain里面的MBean要求name唯一。(推荐)
解决:spring.jmx.default-domain=你随便写一个非同名的domain
7.在web应用程序停止时未能将其删除。线程将随着时间的推移而更新,以尝试避免可能的内存泄漏。
原因:因为tomcat 存在 threadlocals 内存泄漏风险,需要手动清理过期的request请求中创建的本地线程。
springboot 项目:第一步:添加监听,第二步:自定义监听实现类
学习网址以及代码:实测不能解决问题。https://blog.csdn.net/weikzhao0521/article/details/106259773
6.tomcat线上服务器部署项目(多模块)
1.安装配置
学习网址:完整步骤按此来可行。
https://blog.51cto.com/u_12348890/2093732
部分步骤备份:
- 配置jdk和maven
1.传Oracle JDk和Tomcat服务器的压缩包到服务器:
2.在usr目录下创建文件夹
sudo mkdir –p /usr/java
配置jdk环境变量并生效
export JAVA_HOME=/usr/java/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
3.解压Tomcat到指定文件夹
yum install unzip
unzip usr/dev/apache-maven-3.6.3.zip -x __MACOSX/*
修改server.xml配置文件,在最后的<Host name>标签后面添加下列语句:
<Context path="" docBase="/home/user/apache-tomcat-9.0.6/webapps/" debug="0" reloadable="true" crossContext="true"/> #其中docBase是我的Tomcat目录
4.关闭防火墙(不太管用):
安装iptables-services
yum install iptables-services
systemctl enable iptables.service //设置开机启动
查看:systemctl status firewalld.service
关闭:systemctl stop firewalld.service
关开机启动:systemctl disable firewalld.service
2.更改端口号8080为80
需要先设置开放端口80,再关闭防火墙。
学习网址:实测好用 https://blog.csdn.net/JUFENG_FEI/article/details/116236488
打开配置文件就会发现,他默认只开放了22端口,我们就可以复制那一行,并在紧挨着他的下面插入,并改为我们想要开放的端口号。注意:必须是紧挨着的下一行。
再彻底关闭防火墙以及tomcat重启时的开机启动
设置完成后重启:service iptables restart
查看防火墙状态: service iptables status
关闭防火墙:service iptables stop
禁止防火墙自启动:chkconfig iptables off
查看自启动状态列表:chkconfig iptables --list
5.无法将位于-的资源添加到Web应用程序-的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。
在/conf/context.xml 的 </Context>前添加以下内容(大小默认是1024,单位是KB):
<Resources cachingAllowed="true" cacheMaxSize="100000" />
4.tomcat server.xml中的标签
<Host>标签:
<Host name=".xxxx.xxx.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Alias>xxx.xxx.com</Alias>
<Context>标签:
path: 指定访问该Web应用的URL入口。
docBase: 指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。
reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。
<Context path="" docBase="/usr/dev/apache-tomcat-9.0.41/webapps/payment" debug="0" reloadable="fales" crossContext="true"/>
<Context path="/" docBase="manager" reloadable="false" source="org.eclipse.jst.jee.server:tsj-spring"/>
3.信息 [http-nio-8080-exec-15] org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误
java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:431)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:503)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1629)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
发请求时不要带https 用http,暂不处理。
2.javax.management.InstanceAlreadyExistsException:com.zaxxer.hikari:name=mallDataSource
application.xxx 加入代码 spring.jmx.enabled=false
1.查看日志/清空日志
du -h *.* | sort -hr 查看文件大小并排序
tail -f catalina.out 查看日志
echo "" > catalina.out 清空日志
1、tail
命令格式:
tail[必要参数][选择参数][文件]
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
举例:
tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
tail -fn 10 test.log 循环实时查看最后1000行记录(最常用的)
配合grep用:
tail -fn 1000 test.log | grep '关键字'
如果一次性查询的数据量太大,可以进行翻页查看,例如:
tail -n 4700 aa.log |more -1000 可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2.head
跟tail是相反的head是看前多少行日志
head -n 10 test.log 查询日志文件中的头10行日志;
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
head其他参数参考tail
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3.cat
cat 是由第一行到最后一行连续显示在屏幕上
一次显示整个文件 :
$ cat filename
从键盘创建一个文件 :
$cat > filename
将几个文件合并为一个文件:
$cat file1 file2 > file 只能创建新文件,不能编辑已有文件.
将一个日志文件的内容追加到另外一个 :
$cat -n textfile1 >> textfile2
清空一个日志文件:
$cat : >textfile2
注意:> 意思是创建,>>是追加。千万不要弄混了。
cat其他参数参考tail
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4.more
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。
more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。more命令从前向后读取文件,因此在启动时就加载整个文件。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)
more的语法:more 文件名
Enter 向下n行,需要定义,默认为1行
Ctrl f 向下滚动一屏
空格键 向下滚动一屏
Ctrl b 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
v 调用vi编辑器
!命令 调用Shell,并执行命令
q退出more
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5.sed
这个命令可以查找日志文件特定的一段 , 根据时间的一个范围查询,可以按照行号和时间范围查询
按照行号
sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。
按照时间段
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6.less
less命令在查询日志时,一般流程是这样的
less log.log
shift + G 命令到文件尾部 然后输入 ?加上你要搜索的关键字例如 ?1213
按 n 向上查找关键字
shift+n 反向查找关键字
less与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,而且 less 在查看之前不会加载整个文件。
常用命令参数:
less与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,而且 less 在查看之前不会加载整个文件。
less log2013.log 查看文件
ps -ef | less ps查看进程信息并通过less分页显示
history | less 查看命令历史使用记录并通过less分页显示
less log2013.log log2014.log 浏览多个文件
常用命令参数:
-b <缓冲区大小> 设置缓冲区的大小
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
h 显示帮助界面
q 退出less 命令
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
其他命令
history // 所有的历史记录
history | grep XXX // 历史记录中包含某些指令的记录
history | more // 分页查看记录
history -c // 清空所有的历史记录
!! 重复执行上一个命令
查询出来记录后选中 : !323
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
linux日志文件说明
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件