operator
1、网络
1、sys泛红以及ssh暴力破解
netstat -nap | grep SYN_RECV
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
SYN攻击:
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
#netstat -nap | grep SYN_RECV
while [ $a=10 ] && [ $b = 20 ] ; do echo "ok"; break; done
修改内核防止sync工具的最大连接数
#查看 sysctl -a|grep net.ipv4.tcp_max_syn_backlog #修改 sysctl -w net.ipv4.tcp_max_syn_backlog=3000
2、windows路由添加
添加永久路由
route print 打印路由信息
route add 10.188.0.0 mask 255.255.0.0 192.168.1.253 -p
route delete 10.10.10.0(目的网段网络地址) 表示删除路由
route change 192.168.0.0 mask 255.255.0.0 192.168.14.1 metric 1 if 2 (CHANGE参数只能修改“网关”和“跳数”)。
3、网卡问题
如果多个网卡存在
删除网卡:
nmcli connection delete 网卡id
cd /etc/sysconfig/network-scripts/
rm -f ifcfg-eth0
cp ifcfg-ens192 ifcfg-eth0
cat ifcfg-eth0:
TYPE="Ethernet"
BROWSER_ONLY="no"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.100.236"
PREFIX="24"
GATEWAY="192.168.100.254"
DNS1="114.114.114.114"
PEERDNS="no"
IPV6_PRIVACY="no"
DNS2="8.8.8.8"
nmcli c reload
nmcli c
nmcli c up eth0
或者重启服务,重启系统
centos7取消无线网卡
echo "blacklist iwlwifi" > /etc/modprobe.d/blacklist-iwlwifi.conf
depmod -a
reboot
lsmod | grep iwlwifi
#开机禁用
[root@beijing-server ~]# cat /etc/default/grub
...
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet modprobe.blacklist=iwlwifi"
4、 spring-cloud服务在访问redis时出现连接失败(服务注册)
原因:是因为基于docker部署的服务在注册到nacos中时,注册的地址是容器的地址,服务之间跨主机无法访问容器中的地址。
如果是docker启动的容器,在映射端口映射到物理机的端口必须是6379,或者使用host网络。
5、邮箱ssl配置
qq邮箱配置脚本
[root@xjp-001-zlq ~]# cat smtps-mailx.sh
#/bin/bash
COLOR='echo -e \E[01;32m'
COLOR_ERROR='echo -e \E[01;31m'
END='\E[0m'
INSTALL_SMTPS(){
set -e
if [ ! -d "/root/.certs" ]; then
yum install -y nss-tools mailx
sleep 2
mkdir /root/.certs
echo -n | openssl s_client -connect mail.iandun.cn:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/iandun.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/iandun.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/iandun.crt
cat >/root/.mailrc<<-EOF
set from=zhanglaiqiang@iandundd.cn
set smtp=smtps://mail.iandundd.cn:465
set smtp-auth-user=zhanglaiqiang@iandundd.cn
set smtp-auth-password=xxxxxxxxxx #授权码 此处根据实际情况需要修改
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs
EOF
$COLOR "#######发送测试邮件到测试邮箱409003604@qq.com########" $END
echo "FBI Warning " | mail -v -s hello 409003604@qq.com
if [ $? == 0 ]; then
$COLOR "#######smtps服务部署成功!########" $END
else
$COLOR_ERROR "#######smtps服务部署失败!########" $END
fi
else
$COLOR_ERROR "#######请检查~/.certs目录已经存在########" $END
fi
}
INSTALL_SMTPS
下面是配置163邮箱的
rm -f .certs2/*
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs2/163.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs2 -i ~/.certs2/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs2 -i ~/.certs2/163.crt
certutil -L -d ./.certs2
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./.certs2 -i ./.certs2/163.crt
5、iftop 查看网卡流量
2049端口是跟nfs相关的
iftop -i eth0 -P
iftop -i
像下面显示名称为名称的展示为服务端口按大N键


服务器查看进程 netstat -ltnp
https://blog.csdn.net/icanflyingg/article/details/122618127
根据报警处理
在容器中,容器的虚拟网卡是成对出现的,比如下面
[zhanglaiqiang@andun-server08 ~]$ ip a | grep -A 3 -B 3 'vethdff0645'
valid_lft forever preferred_lft forever
73: veth495b6ab@if72: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-03a10779cc6c state UP group default
link/ether 8e:e1:eb:0a:5c:8b brd ff:ff:ff:ff:ff:ff link-netnsid 2
1370: vethdff0645@if1369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 66:5f:42:73:49:c0 brd ff:ff:ff:ff:ff:ff link-netnsid 19
862: veth6ce0423@if861: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-a733af38ab32 state UP group default
link/ether 92:c6:0e:36:88:1c brd ff:ff:ff:ff:ff:ff link-netnsid 8
1370 表示物理网卡的网卡序号,而if1369表示链接到容器当中的eth0网卡序号
#通过下面的方式来查看容器中网卡的序号,也可以通过Ip a查看 ,
#需要安装 ip命令,执行apt-get install iproute2进行安装
root@a51df0542708:/# cat /sys/class/net/eth0/ifindex
以上告警为容器网卡,找到对应的容器
#找到网卡所在的物理机网卡序号
[zhanglaiqiang@andun-server08 ~]$ ip a | grep 'vethdff0645' | awk -F ":" '{print $1}'
1370
[zhanglaiqiang@andun-server08 ~]$
#通过找到容器中链接宿主机的网卡序号
[zhanglaiqiang@andun-server08 ~]$ for i in `docker ps | awk '{print $NF}' | grep -v 'NAMES'` ; do echo $i; docker exec -it $i cat /sys/class/net/eth0/iflink | grep '1370' ; done
iandun_cmsserver
iandun_repertoryweb
iandun_repertoryserver
iandun_cmsweb
P_W
1370 #找到对应的容器为P_W
plg_promtail
drink_dl
ppg_auto
bloodsugar
ckwear
extensionweb
partnerweb
customerweb
iandunlog
iandun-open-api
iandun-soul
iandun-gateway
showweb
implant
2、系统服务
1 、查看直接通过system启动的war包项目
ps -ef | grep -o ".config.file=/usr/local/tomcat-[a-z,-]\+"
.config.file=/usr/local/tomcat-app-demo
.config.file=/usr/local/tomcat-cmsserver-demo
.config.file=/usr/local/tomcat-customer-server-demo
2、日志切割
java启动jar包基于运维系统层面的日志切割方式参考
```
nohup java -jar common-api.jar | /usr/local/cronolog/sbin/cronolog logs/console-%Y-%m-%d.out &
```
3、cpu暴涨 -通过线程查找问题
#方式1:
#第一步: 通过top找到资源使用率最大的那个进程,比如16108
1、 ps -mp 16108 -o THREAD,tid,time | sort -rn
[zhanglaiqiang@watch-server01 ~]$ ps -mp 16108 -o THREAD,tid,time | sort -nr | head
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 68.7 - - - - - - 00:07:42
root 5.9 19 - - - - 16137 00:00:40
root 5.7 19 - - - - 16138 00:00:38
root 5.3 19 - - - - 16136 00:00:36
root 2.0 19 - - - - 16308 00:00:13
root 2.0 19 - - - - 16139 00:00:13
root 1.9 19 - - - - 16688 00:00:12
root 1.8 19 - - - - 16690 00:00:12
root 1.7 19 - - - - 16687 00:00:10
#然后通过上面的主进程找到对应的资源使用率最大线程id,比如: 16137
#转换为16进制
2、printf "%x\n" 16137
3f09
定位到那个进程的代码片段
3、jstack 16108 | grep 3f09 -A 30
[zhanglaiqiang@watch-server01 ~]$ sudo /andun_work/jdk1.8.0_144/bin/jstack 16108 | grep 3f09 -A 30
[sudo] password for zhanglaiqiang:
"C2 CompilerThread1" #7 daemon prio=9 os_prio=0 tid=0x00007f3c80515000 nid=0x3f09 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #6 daemon prio=9 os_prio=0 tid=0x00007f3c80513000 nid=0x3f08 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" #5 daemon prio=9 os_prio=0 tid=0x00007f3c80511000 nid=0x3f07 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Surrogate Locker Thread (Concurrent GC)" #4 daemon prio=9 os_prio=0 tid=0x00007f3c8050f800 nid=0x3f06 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f3c804dc800 nid=0x3f05 in Object.wait() [0x00007f3c1a816000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000006c0906578> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f3c804d7800 nid=0x3f04 in Object.wait() [0x00007f3c1a917000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000006c09065b8> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
"main" #1 prio=5 os_prio=0 tid=0x00007f3c80009800 nid=0x3eee runnable [0x00007f3c88013000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
#方式2
top -H -p pid #pid指定cpu使用率最大的那个pid文件
3、系统负载计算
[zhanglaiqiang@demo02 iandun-system]$ top -n 1 -b | grep average
top - 11:59:30 up 17 days, 20:54, 7 users, load average: 1.90, 2.37, 2.43
#解释
1.90表示系统1分钟负载
2.37表示系统5分钟负载
2.43表示系统15分钟负载
比如: 系统有8个cpu,系统负载不能超过8
4、云服务器cpu核数统计
CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
#查看CPU信息(型号)
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 4
## 查看物理CPU个数
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
1
# 查看每个物理CPU中core的个数(即核数)
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 4
# 查看逻辑CPU的个数
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "processor"| wc -l
8
[zhanglaiqiang@demo02 iandun-system]$
这些都代表什么,那就请看CPU架构
多个物理CPU,CPU通过总线进行通信,效率比较低,如下:

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信,如下:

多核超线程,每个核有两个逻辑的处理单元,两个核共同分享一个核的资源,如下:

从上面执行的结果来看,证明我使用的cpu有4* 2 = 8 核,每个核有2个超线程,所以有8个逻辑cpu。
从上面执行的结果来看,证明我使用的cpu有4* 2 = 8 核,每个核有2个超线程,所以有8个逻辑cpu。
5、巡检脚本配置以及授权
创建用户
useradd devops && echo "123456" | passwd --stdin devops
创建授权
[root@loaclhost ~]# visudo #或者 vim /etc/sudoers 两种方式
devops ALL=(ALL) NOPASSWD:/usr/bin/netstat,/bin/bash,/bin/python3
6、Iotop命令详解
#iotop命令是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看
#与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控
iotop的安装有前提条件
1:内核版本为2.6.20或更高版本
2:Python 2.7或更高的版本
iotop参数:
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid。接进程号,监视指定进程,只会输出该进程的统计信息。
-u USER:监控的进程用户。
-k 使用千字节而不是人类友好单位
iotop使用 iotop -k 查看如下效果

使用说明
Total DISK READ:总磁盘读
Actual DISK READ:实际磁盘读
Total DISK WRITE :总磁盘写入
Actual DISK WRITE:实际磁盘写入
TID列:进程PID
USER:进程对应的用户
iotop快捷键
左右箭头:改变排序方式,默认是按IO排序。
r:改变排序顺序。反向排序
o:只显示有IO输出的进程。
p:进程/线程的显示方式的切换。
a:显示累积使用量。
q:退出。
iotop的例子
iotop -o #可以清楚地知晓是什么程序在读写磁盘,速度以及命令行,pid 等信息
使用非交互模式将iotop命令输出信息写入日志
#nohup iotop -b -o -n 10 -d 5 -t > /tmp/iotop.log &
#借助iotop命令找到消耗I/O最高的进程
iotop -oP
监控系统I/O
[root@localhost ~]# iotop
监控用户root的I/O
[root@localhost ~]# iotop -u root
监控进程号是1的I/O
[root@localhost ~]# iotop -p 1
7、打印需要杀死的进程
ps -ef|grep boco|grep -v grep|awk '{print "kill -9 "$2}' #打印需要杀死进程
8、清理journalctl日志
# 查看占用的磁盘
journalctl --disk-usage
# 设置占用的磁盘空间,日志量大于这些后自动删除旧的
journalctl --vacuum-size=512M
# 2d之前的自动删除
journalctl --vacuum-time=2d
# 查看系统内核日志
journalctl -k
9、centos启动异常
1.报错:Entering emergency mode. Exit the shell to continue.
2.故障分析:不按规范挂机或重启导致文件系统故障。
3.故障状态:

备注:注意中间读取的是sda3失败
4.故障解决:
输入命令:xfs_repair -v -L /dev/sda3
-L 选项指定强制日志清零,强制xfs_repair将日志归零,即使它包含脏数据(元数据更改)
3、磁盘挂载
1、磁盘空间判断大于30%
df -Ph | awk '{if(+$5>20) print $5}'
df -Ph | awk '{if(+$5>20) print $(NF-1)}'
2、挂载windows的共享
如果共享windows的目录,在linux上挂载:
centos8:
客户端更改: wordpress-博客案例
插件安装,在windows中必须创建账号,并且授权目录共享目录可以使用
yum -y install cifs-utils
方式1:
写入到fatab当中
\\10.8.0.101\share /apps/wordpress/html/devops cifs user,uid=500,rw,suid,username=ilync,password=ifnvps8898. 0 0
方式2: 用命令执行-可能方式1不行的情况下使用方法2
mount -t cifs //10.8.0.101/share /apps -o username=ilync,password=ifnvps8898.,vers=2.0
centos7.3配置;
手动执行挂载
mount -t cifs -o username=ilync,password=ifnvps8898.,vers=2.0 //10.8.0.101/share /apps/
写入到/etc/fstab文件中
\\10.8.0.101\share /apps/ cifs username=ilync,password=ifnvps8898.,vers=2.0 0 0
3、磁盘
#disk_fq=$(df -Ph | awk '{if(+$5>10) print "分区:"$1}')
disk_fq=$(df -m | awk '{if(+$5>10) print "分区:"$1" "$5" "$4}' | awk 'BEGIN {max = 0} {if ($3+0 >max+0) {max=$3; content=$0}} END {print content}' | awk '{print $1}')
#disk_to=$(df -Ph | awk '{if(+$5>10) print "总空间:"$2}')
disk_to=$(df -m | awk '{if(+$5>10) print "总空间:" $2 }' | awk -F ":" 'BEGIN {max = 0} {if ($2+0 >max+0) {max=$2; content=$0}} END {print content}')
#disk_us=$(df -Ph | awk '{if(+$5>10) print "使用空间:"$3}')
disk_use=`df -m | awk '{if(+$5>10) print "使用空间:"$3}' | awk -F ":" '{print $NF}' | sort -nr | head -n 1`
#disk_fe=$(df -Ph | awk '{if(+$5>10) print "可用空间:"$4}')
disk_fe=$(df -m | awk '{if(+$5>10) print "可用空间:" $4 }' | awk -F ":" 'BEGIN {max = 0} {if ($2+0 >max+0) {max=$2; content=$0}} END {print content}' | awk '{print $1}')
#disk_ul=$(df -Ph | awk '{if(+$5>20) print "磁盘使用率:"$5}')
disk_ul=$(df -m | awk '{if(+$5>10) print "磁盘使用率:" $5 }' | awk -F ":" 'BEGIN {max = 0} {if ($2+0 >max+0) {max=$2; content=$0}} END {print content}')
4、Java和Tomcat
1、 catalina.sh Java_opts配置
cattalina.sh中在下面位置添加,资源限制使用

JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:+UseG1GC -Dfile.encoding=UTF-8"
添加jmx_exporter
JAVA_OPTS="-javaagent:/home/andun_devops/jmx_prometheus_javaagent/jmx_prometheus_javaagent-0.16.1.jar=38083:/home/andun_devops/jmx_prometheus_javaagent/config.yaml -server -Xms512m -Xmx1024m -XX:+UseG1GC -Dfile.encoding=UTF-8"
docker-compose资源限制
deploy:
resources:
limits:
cpus: '1'
memory: 1000M
skywalking-agent对接,需要提前下载,jmx_exporter同理
2、tomcat:
在catalina.sh中找到JAVA_HOME中添加
JAVA_OPTS="-javaagent:/home/andun_devops/skywalking_agent/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=cmsserver_demo -Dskywalking.collector.backend_service=172.17.224.52:11800 -jar xxx.jar"
3、 java
java -javaagent:/home/andun_devops/skywalking_agent/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=cmsserver_demo -Dskywalking.collector.backend_service=172.17.224.52:11800 -jar xxx.jar
4、容器
[root@cms_project iandun-agent]# cat Dockerfile
FROM adoptopenjdk/openjdk8
RUN mkdir /opt/project
WORKDIR /opt/projectADD iandun-agent.jar /opt/project/
ADD agent.tar.gz /opt/project/
EXPOSE 8090
ENTRYPOINT ["java","-javaagent:/opt/project/agent/skywalking-agent.jar","-Dskywalking.agent.service_name=andun-agent","-Dskywalking.collector.backend_service=122.51.39.181:11800","-jar","/opt/project/iandun-agent.jar"]
5、tomcat指定版本的jdk
[zhanglaiqiang@andun-demo04 iandun-cmsserver-u9-demo]$ cat bin/catalina.sh | head -n 10
#!/bin/sh
JAVA_HOME="/usr/local/java/jdk1.8.0_144"
JRE_HOME="/usr/local/java/jdk1.8.0_144/jre"
[zhanglaiqiang@andun-demo04 iandun-cmsserver-u9-demo]$ cat bin/setclasspath.sh | head -n 10
#!/bin/sh
JAVA_HOME="/usr/local/java/jdk1.8.0_144"
JRE_HOME="/usr/local/java/jdk1.8.0_144/jre"
6、Docker(tomcat部署skywalking-agent)
cat bin/catalina.sh | head -n 10
#在前一行加入下面即可,调整文件位置
#!/bin/sh
CATALINA_OPTS="-javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=test_demo_002 -Dskywalking.collector.backend_service=10.51.8.110:11800"; export CATALINA_OPTS
7、tomcat性能优化
<Connector port="9380" protocol="HTTP/1.1" minProcessors="10" maxProcessors="1024" acceptCount="1024"
connectionTimeout="20000" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000"
redirectPort="9443" />
#参考 https://blog.csdn.net/qq_40741855/article/details/116009877
# https://blog.csdn.net/qq_23994787/article/details/79479686
acceptCount: 默认值100
虽然tomcat同时可以处理的连接数目是maxConnections,但服务器中可以同时接收的连接数为maxConnections+acceptCount 。acceptCount的设置,与应用在连接过高情况下希望做出什么反应有关系。如果设置过大,后面进入的请求等待时间会很长;如果设置过小,后面进入的请求立马返回connection refused

查看连接数: 假如端口为8380
[root@iandun-app-u9-demo tomcat]# netstat -nat | grep 8380 tcp 0 0 0.0.0.0:8380 0.0.0.0:* LISTEN
8、tomcat连接数查看
[zhanglaiqiang@timed-task-server02 ~]$ netstat -antp | grep 9380 | grep ESTABLISHED
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 172.17.113.108:9380 172.17.224.109:52400 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.118:43352 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.109:52436 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.118:43284 ESTABLISHED -
tcp6 0 0 172.17.113.108:59380 172.17.224.58:22229 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.109:52378 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.118:43306 ESTABLISHED -
#172.17.224.118 172.17.224.109表示nginx地址
5、Jenkins
1、jenkins钉钉告警添加位置
post {
always {
wrap([$class: 'BuildUser']) {
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=667531b61ff814f81270d3b1ab2586d6cb49a2a2beab03932794d7c3f7faee1' -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content": "部署服务:${JOB_NAME} \n构建分支: ${branch}\n构建ID: ${BUILD_ID}\n构建人: ${BUILD_USER}\n提交信息:${commit}构建状态:${currentBuild.currentResult}"}}'"""
}
}
}

2、jenkins dockerfile报错
正确写法1;
["./opt/apache-tomcat-9.0.44/bin/startup.sh", "run"]
正确写法2;
/opt/apache-tomcat-9.0.44/bin/startup.sh
6、容器
非常全面的文档参考
https://haicoder.net/docker/docker-logs.html
1、docker-compose安装
wget -P /usr/local/bin/ --user=yunxiao --password=Yun#xia0 https://www.zlqit.com/devops/docker/docker-compose
chmod +x /usr/local/bin/docker-compose
2、docker相关
删除所有的容器
docker rm -f (docker ps -qa)
删除所有没有在使用的容器
docker image prune -a
3、java项目启动base image Dockerfile
发送给研发的Dockerfile参考文件
输送给研发的Dockerfile说明信息
FROM harbor.iandun.com/devops/java:v1.8
# run表示需要执行的shell命令,如果没有可以忽略
RUN mkdir /opt/project
#默认工作目录
WORKDIR /opt/project
#拷贝打包文件到工作目录
COPY hudson.war /opt/project/
#EXPOSE需要暴露服务的端口 ,如果有多个端口,可以使用EXPOSE暴露多个端口
EXPOSE 8080
EXPOSE 50000
#需要执行的shell命令
ENTRYPOINT [ "/opt/jdk1.8.0_281/bin/java" ]
#将启动的参数写入到cmd
CMD [ "-jar", \
"参数1", \
"参数2", \
"...."
]
传递命令的两种方式:
方式1
ENTRYPOINT [ "/opt/jdk1.8.0_281/bin/java" ]
#将启动的参数写入到cmd
CMD [ "-jar", \
"参数1", \
"参数2", \
"...."
]
方式2
ENTRYPOINT ["java","-Duser.timezone=GMT+08","-jar","/web.jar"]
tomcat 启动dockerfile :
使用tomcat直接部署业务
FROM centos:centos7
MAINTAINER zhanglaiqiang
RUN mkdir /usr/local/tomcat-cmsserver-demo -p
WORKDIR /usr/local/tomcat-cmsserver-demo
COPY jdk-8u281-linux-x64.tar.gz /usr
ADD apache-tomcat-8.5.33.tar.gz /usr/
RUN chmod -R 777 /usr/*.tar.gz && mkdir /var/{jenkins_home,webapps} -p && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN tar -zxvf /usr/jdk-8u281-linux-x64.tar.gz -C /opt && rm -rf /usr/jdk-8u281-linux-x64.tar.gz && mv /usr/apache-tomcat-8.5.33/* /usr/local/tomcat-cmsserver-demo/ && rm -rf /usr/apache-tomcat-8.5.33
ENV JAVA_HOME /opt/jdk1.8.0_281
ENV PATH $PATH:/$JAVA_HOME/bin
RUN cd /usr/local/tomcat-cmsserver-demo/bin && pwd && ls -l
COPY hudson.war /usr/local/tomcat-cmsserver-demo/webapps
EXPOSE 8080
#方式1
ENTRYPOINT [ "/usr/local/tomcat-cmsserver-demo/bin/catalina.sh", "run" , "&&" , "tail", "-f", "/opt/apache-tomcat-9.0.44/logs/catalina.out" ]
#如果容器没有生成catalina.out日志,使用下面的方式
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
tomcat容器:
[root@loaclhost test]# cat /root/jenkins/Dockerfile-tomcat
FROM centos:centos7
MAINTAINER zhanglaiqiang
RUN mkdir /usr/local/tomcat-cmsserver-demo -p
WORKDIR /usr/local/tomcat-cmsserver-demo
COPY jdk-8u281-linux-x64.tar.gz /usr
ADD apache-tomcat-8.5.33.tar.gz /usr/
RUN chmod -R 777 /usr/*.tar.gz && mkdir /var/{jenkins_home,webapps} -p && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN tar -zxvf /usr/jdk-8u281-linux-x64.tar.gz -C /opt && rm -rf /usr/jdk-8u281-linux-x64.tar.gz && mv /usr/apache-tomcat-8.5.33/* /usr/local/tomcat-cmsserver-demo/ && rm -rf /usr/apache-tomcat-8.5.33
ENV JAVA_HOME /opt/jdk1.8.0_281
ENV PATH $PATH:/$JAVA_HOME/bin
tomcat-业务容器
[root@loaclhost test]# cat /test/Dockerfile-tomcat
FROM harbor.iandun.com/devops/tomcat:v8.5.33
COPY hudson.war /usr/local/tomcat-cmsserver-demo/webapps/
EXPOSE 8080
EXPOSE 50000
ENTRYPOINT [ "/usr/local/tomcat-cmsserver-demo/bin/catalina.sh", "run" , "&&" , "tail", "-f", "/usr/local/tomcat-cmsserver-demo/logs/catalina.out" ]
测试命令
docker run -p 2022:22 -v /etc/hosts:/etc/hosts --name centos --hostname centos-test centos tail -f /var/log/message
java启动jar包方式: cms重构(业务封装)
FROM harbor.iandun.com/devops/java:1.8.0_291
RUN mkdir /opt/project
WORKDIR /opt/project
ADD iandun-log.jar /opt/project/
EXPOSE 8086
#注重启动方式
ENTRYPOINT ["nohup","java","-jar","/opt/project/iandun-log.jar",">/dev/null","2>&1","&"]
4、dockerfile 拷贝目录下的文件到容器中
COPY dist/ /data/nginx/html