线上性能排查,以下场景你可能遇到过:
问题:1.2.3.4的sshd服务监听端口是22,如何统计该sshd服务的各种连接状态(如TIMEWAIT/CLOSEWAIT/ESTABLISHED)的连接数量?
常用方法:
- 使用netstat命令配合grep和awk进行统计:
sh
netstat -n | grep 1.2.3.4:22 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
- 或者使用netstat命令结合特定条件筛选:
sh
netstat -lnpta | grep ssh | egrep "TIME_WAIT | CLOSE_WAIT | ESTABLISHED"
说明:netstat是一个常用的网络连接检查工具,与grep和awk结合使用效果更佳。如果是在阿里云环境中,还可以使用更便捷的方法。
问题:从已经备份的suyun.2019-06-26.log.bz2日志文件中,找出包含关键字1.2.3.4的日志条目总数。
常用方法:
- 使用bzcat命令结合grep和wc进行统计:
sh
bzcat suyun.2019-06-26.log.bz2 | grep '1.2.3.4' | wc -l
- 或者使用bzgrep命令直接处理压缩文件:
sh
bzgrep '1.2.3.4' suyun.2019-06-26.log.bz2 | wc -l
- 还可以通过less命令逐行查找:
sh
less suyun.2019-06-26.log.bz2 | grep '1.2.3.4' | wc -l
说明:线上日志通常以压缩格式存储,使用bzcat和bzgrep工具可以高效地进行解压和搜索,节省时间和资源。
问题:将/opt/web/suyun_web目录下的内容打包备份到/opt/backup目录,排除掉目录中的logs子目录。
常用方法:
sh
tar -zcvf /opt/backup/shenjian.tar.gz
-exclude /opt/web/suyun_web/logs
/opt/web/suyun_web
说明:这个命令在项目需要打包迁移时经常使用,需要排除日志目录。掌握exclude参数非常重要。
问题:查询服务器上运行服务的总线程数,当线程数超过警戒阈值时,能够快速查出相关进程及其线程信息。
参考方法:
- 使用ps命令结合-L选项统计所有线程:
sh
ps -eLf | wc -l
- 或者使用pstree命令结合-p选项统计所有线程:
sh
pstree -p | wc -l
问题:找出服务器上由某个正在运行的Tomcat产生的大量异常日志文件,清理该文件以释放空间。假设该文件包含“log”关键字,并且大小超过1GB。
常用方法:
第一步:找到该文件
- 使用find命令结合-ls和-sort选项列出所有日志文件并排序:
sh
find / -type f -name "*log*" | xargs ls -lSh | more
- 或者使用du命令结合-sort选项查找大文件:
sh
du -a / | sort -rn | grep log | more
- 另一种方法是直接查找大于1GB的文件:
sh
find / -name '*log*' -size +1000M -exec du -h {} ;
第二步:清空文件
假设找到的文件名为a.log。
- 正确的方法是使用echo命令清空文件内容:
sh
echo "" > a.log
这样文件占用的空间会立即释放。
- 注意不要使用rm命令删除文件,因为即使文件被删除,Tomcat服务仍会继续占用空间,直到重启服务。
问题:显示server.conf文件内容,但屏蔽掉以#开头的注释行。
常用方法:
- 使用sed命令过滤注释行:
sh
sed -n '/^[#]/!p' server.conf
- 或者使用sed命令直接删除注释行:
sh
sed -e '/^#/d' server.conf
- 还可以使用grep命令排除注释行:
sh
grep -v "^#" server.conf
问题:如何排查磁盘IO异常,例如写入慢或当前利用率较高?请找出导致磁盘IO异常的进程ID。
常用方法:
第一步:
使用iotop命令查看当前正在进行磁盘写入操作的所有进程ID:
sh
iotop -o
第二步:
如果此时发现磁盘写入操作很低,几乎没有大的写入行为,则需要进一步排查磁盘本身的问题。可以查看系统日志:
- 使用dmesg命令查看磁盘异常报错:
sh
dmesg
- 或者查看/var/log/message文件:
sh
cat /var/log/message
- 同时可以在写入慢的磁盘上创建一个空文件,验证是否由于磁盘缺陷导致无法写入。