tomcat 倒序


  1. 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 原因看学习网址


  1. 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 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容