文章目录
服务器
磁盘
常用参数
- -h:使用人类可读的形式展示
整个服务器磁盘占用情况
查看服务器磁盘是否快满了,如果满了会导致应用挂起。
df -h
示例:
[root@localhost lli]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda3 197G 118G 80G 60% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 16K 3.9G 1% /dev/shm
tmpfs 3.9G 26M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
某个目录下文件夹大小
查看具体文件夹占用情况,配合文件大小命令查找出大文件用于删除,缓解磁盘压力。
du -sh *
示例:
[root@localhost minio-lli]# du -sh *
0 config
1.3G data
50M minio
4.0K minio.log
4.0K nohup.out
查看文件大小
文件大小命令查找出大文件用于删除,缓解磁盘压力。
ls -lh
示例:
[root@localhost minio-lli]# ls -lh
total 50M
drwx------ 3 root root 19 Mar 22 15:18 config
drwxrwxrwx 5 root root 55 Mar 22 15:23 data
-rwxrwxrwx 1 root root 50M Sep 11 2020 minio
-rw-r--r-- 1 root root 1.4K Mar 22 15:23 minio.log
-rwxrwxrwx 1 root root 1.5K Sep 15 2020 nohup.out
磁盘IO性能
查看某个进程的磁盘读写
pidstat -d 1
针对单个进程进行查看,可以显示正在使用磁盘的进程
pidstat -p $PID -d 1
日志
-
OOM Killer 系统内存满的时候,会杀掉一个分数高的进程,一般内存越大分数越高
-
查看命令`dmesg -T ` 进一步 `dmesg -T | grep Kill`
-
-
部署在Linux下的程序,日志很多,而且实时滚动,可以通过以下方式快速查找自己自己想要的内容:
cat log.txt | grep 'ERROR' -A 5 意思是,在log.txt文件中,查找ERROR字符,并显示ERROR所在行的之后5行 cat log.txt | grep 'ERROR' -B 5 之前5行 cat log.txt | grep 'ERROR' -C 5 前后5行 cat log.txt | grep -v 'ERROR' 排除ERROR所在的行 cat error.log|grep -n " java.lang.reflect.InvocationTargetException"
CPU
- top查看整体情况,M按照内存使用率排序,P按照CPU使用率排序,E、e改变显示的单位。
- top -p pid 查看指定应用情况。
内存
-
相关命令同上
-
free -h
网络
DOS攻击
SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
netstat -nap | grep SYN_RECV
查看TCP连接状态
首先利用以下查看tcp总连接数,判断连接数是否正常:
netstat -anoe|grep 8000|wc -l 查看8000
然后利用如下命令判断各个状态的连接数是否正常:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
根据上述信息,如果TIME_WAIT 状态数量过多,可利用如下命令查看连接CLOSE_WAIT最多的IP地址,再结合业务分析问题:
netstat -n|grep TIME_WAIT|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -10
应用
- jps -v 查看所有java应用及其jvm参数
线程
查找繁忙线程
这里要注意下,线程数量,太多的话可能会导致内存溢出
top -Hp pid
查询线程详细信息
- 先利用
printf '%x\n' tid
将tid换为十六进制:xid。 - 利用
jstack pid|grep xid -A 30
查询线程信息 - 获取线程快照
jstack -l pid > 文件名称.txt
内存
- jmap -heap pid 查看指定pid的堆内存和配置信息,会触发gc
获取内存快照
jmap -dump:live,format=b,file=/home/xxx.hprof pid
监控内存的OOM
# 内存OOM时,自动生成dump文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/
GC
日志
建议日志格式如下:
- 业务
<!--日志格式 时间|级别|链路id|应用名|服务器ip|租户id|用户id|线程名称|logger名称|业务消息 -->
<property name="BIZ_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%X{traceId}|${APP_NAME}|%serverIp|%X{tenantId}|%X{accountId}|%thread|%logger{30}|%msg%n"/>
可以用MDC解决,使用MDC实现日志链路跟踪
- 指标
<property name="METRICS_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS}|${APP_NAME}|%X{className}|%X{methodName}|%X{responseStatus}|%X{timeConsume}|%X{traceId}|%X{errorCode}|%msg%n"/>
- 错误
<property name="ERROR_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%X{traceId}|${APP_NAME}|%serverIp|%X{tenantId}|%X{accountId}|%thread|%logger{30}|%msg%n"/>
MySQL
慢SQL
查询当前事务情况
-- 当前运行的所有事务
select * from information_schema.innodb_trx;
-- 当前出现的锁
SELECT * FROM information_schema.INNODB_LOCKS;
-- 锁等待的对应关系
select * from information_schema.INNODB_LOCK_WAITS;
查看慢SQL是否开启
# 查询慢SQL查询是否开启
show variables like 'slow_query_log';
# 查询慢SQL的时间
show variables like 'long_query_time';
# 查看慢SQL存放路径,一般:/home/mysql/data3016/mysql/slow_query.log
show variables like 'slow_query_log_file';
开启慢SQL
方式一:修改配置文件,重启生效.
slow_query_log = 'ON'
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
方式二:命令设置,实时生效,重启失效。
set global slow_query_log='ON'; #开启慢SQL查询
set global slow_query_log_file='/usr/local/mysql/data/slow.log';
set global long_query_time=1; #注意
https://dev.mysql.com/doc/refman/8.0/en/using-system-variables.html显示修改全局
long_query_time
变量仅对新会话生效而对当前会话不起作用
自带的慢sql分析
/www/server/mysql/bin/mysqldumpslow -s r -t 10 /www/server/data/mysql-slow.log
连接过多监控
show processlist;
常出现too many connections异常,数据库连接到达最大连接数。默认:151
通过set global max_connections=XXX
增大最大连接数。
死锁
关键日志:Deadlock found when trying to get lock; try restarting transaction ;
获取事务隔离级别
select @@tx_isolation
查询数据库死锁日志
show engine innodb status
长事务查询
查找持续时间超过 60s 的事务
select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60
Redis
内存不足
连接过多
慢命令
网络延迟
其他中间件类似的排查方式。
Docker
删除 Docker 中的镜像(image)和容器(container)以释放磁盘空间
可以按照以下步骤进行操作:
列出 Docker 镜像和容器:
在命令行中执行以下命令,列出当前系统中的所有 Docker 镜像和容器:
docker images
docker ps -a
停止并删除容器:
如果有运行中的容器,需要先停止它们,然后再删除。使用以下命令停止和删除容器:
# 停止所有正在运行的容器
docker stop $(docker ps -q)
# 删除所有容器(包括停止状态的)
docker rm $(docker ps -aq)
删除不需要的镜像:
接下来,可以删除不再需要的 Docker 镜像。执行以下命令删除特定镜像或者清理无用镜像:
# 删除特定镜像(使用镜像的 ID 或者名称)
docker rmi image_id_or_name
# 清理无用镜像(即没有被任何容器使用的镜像)
docker image prune
清理 Docker 占用的磁盘空间:
使用以下命令可以清理 Docker 占用的磁盘空间,包括未使用的镜像、容器和其他资源:
docker system prune
请谨慎操作,确保你要删除的镜像和容器是不需要的,以免造成数据丢失。