我正在参加「金石计划」
写在前面
在工作中,我们可能会遇到一些问题,然后通过自己得一顿操作,最终把问题解决了。
可能在一两天之内,我们还是会记得解决这些问题的方法,但是过了一段时间之后,基本上都忘光了。
所以这里,我们应该要养成一个良好的习惯,把每次遇到的问题,如何解决的,都记录下。下次再看文档,这样就想起来了。
<<千与千寻>>有些事情是不可能忘记的,只是一时想不起来
下面,就分享一下,我遇到的一些问题,和相关的解决方法。
可能以前也有分享过一篇,有兴趣的小伙伴,可以查看这里:常用操作合集一、常用操作合集二、常用操作合集三、常用操作合集四、常用操作合集五
1.linux磁盘读写慢排查
sh
#1.查看硬盘是否繁忙
top
#第三行,有个wa(io wait是cpu等待io完成时间百分比),这个值大于1,需要重点关注
#2.找出占用硬盘带宽高的进程
iotop
#用于展示进程读写排行
#3.查看进程读写哪些文件
lsof -p xxx
#4.检查硬盘是否存在坏道(-o /root/badblocks.log指定输出文件)
badblocks -s -v /dev/sda
输出:Pass completed, 37 bad blocks found. 表示硬盘存在37个坏块。
#查看所有分区
lsblk
2.win快速进入bios设置界面
bash
#重启进入bios界面
shutdown /r /fw /t 0
#定时重启电脑
shutdown /r /t 1000
/r:重启
/fw:下次启动转到固件界面
/t x: x秒后执行
33.cpu过高排查
sh
#1.通过top查看到cpu过高的进程pid
top
#例如通过top查看cpu过高的是1313
#2.输出进程里面运行的线程
ps H -eo pid,tid,%cpu | grep 1313
#例如cpu过高的线程tid是1328,对应16进制是530
#3.查看进程,nid
jstack 1313
#可以查看到nid=0x530线程,对应的代码
4.mysql索引失效原因
sh
1.索引列,使用函数或表达式,索引就失效。
例如:select * from users where year(date_column)=2024;
2.查询条件中数据类型和索引列的数据类型不匹配,会发生隐式类型转换,索引就失效。
例如:select * from users where user_id='123'; //user_id是整数列,查询条件'123'是字符串
3.当使用了or连接多个查询条件,其中一个查询条件索引失效,整个查询条件索引也就失效了。
例如:select * from users where name='llsydn' or email='1091391667@qq.com'; //name有索引,email没索引
4.对于复合索引,必须从最左列开始。
5.使用like查询,%通配符在最左边,索引就失效。
例如:select * from users where name like '%llsydn%';
6.表数据量比较少;索引列选择性不高,即存在很多重复数据。
5.docker,harbor默认路由网段修改
docker,默认使用172.17.0.0 docker0
harbor,默认使用172.18.0.0 br-fb480104eaae
你一个docker不要用192.168.0.0/16。用个/24不就行了么,整个192.168.0.0你全用在docker身上不行的。
"bip": "192.168.0.1/24"
6.扫描服务器所有开发端口
sh
#安装nmap
yum install nmap -y
#扫描服务器端口
nmap -p 1-65535 192.168.1.1
7.nacos配置是否会覆盖本地application.yml的配置?
结论:默认情况下,远程配置会覆盖本地配置(比如启动参数,比如本地配置)。
- 1.如果,希望本地application.yml的配置覆盖nacos的配置?
properties
spring.cloud.config.allow-override=true #(允许被覆盖)
该配置的含义是远程配置是否允许被本地属性覆盖 默认true
注:但这是不够的,尽管它开启了总开关,但是还有下面两个默认的小开关卡住了。
- 2.如果,希望nacos的配置不覆盖本地application.yml的配置?
properties
spring.cloud.config.override-none=true #(远程配置不覆盖任何本地配置)
该配置的含义是远程配置不覆盖本地配置(双重否定?太有才了)
true表示远程nacos配置不覆盖本地同名属性
false表示远程nacos配置覆盖本地同名属性 默认为false(远程配置同名属性覆盖本地配置同名属性)
- 3.如果,希望nacos的配置不覆盖本地系统配置或参数?
properties
spring.cloud.config.override-system-properties=false #(远程配置不覆盖系统属性与环境变量,但是会覆盖本地配置文件)
该配置的含义是远程是否覆盖系统配置 默认true
例如,如果希望在启动时可能通过环境变量或程序参数修改某个配置,需要将该属性在远程配置中设置为false。
例:
sh
java --jar xxx.jar --spring.profiles.active=dev
系统配置指通过命令行参数或环境变量方式 指定配置属性值
注意:这些属性参数值需要配置在远程配置文件中,配置在本地配置文件不生效
8.根据进程 PID 找到进程启动目录、二进制、日志位置等信息
sh
#查找进程pid
ps -aux|grep jenkins
#进入到进程目录
cd /proc/2401 #(带上进程pid)
更多详情,可以参考这里:/proc/pid目录详解
9.定时写一个shell脚本,按日期切割nohup.out日志内容
sh
#!/bin/bash
cd /opt/llsydn
# 设置切割文件的前缀和存放目录
NAME=$(basename $(basename "*.out") .out)
PREFIX="/opt/llsydn/*.out"
DATE=$(date +%Y%m%d)
OUTPUT_DIR="/opt/llsydn/log"
LOGFILE="${OUTPUT_DIR}/${NAME}-${DATE}.log"
# 检查目录是否存在,不存在则创建
mkdir -p "$OUTPUT_DIR"
# 将nohup.out的当前内容追加到新的日志文件中
tail -n +1 *.out >> "$LOGFILE"
# 清空.out文件
> ${NAME}.out
# (可选)如果你希望保留一定天数的日志,可以添加删除旧日志的逻辑
# 例如,保留最近7天的日志
find "$OUTPUT_DIR" -name "${NAME}-*.log" -type f -mtime +7 -delete
sh
echo "*/1 * * * * /opt/llsydn/logcut.sh" | crontab -
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下,再走呗!!!