线上操作问题排查
一、了解机器连接数情况
问题
:
1.2.3.4
的
sshd
的监听端口是
22
,如何统计
1.2.3.4
的
sshd
服务各种连接状态(
TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED
)的连接数。
参考答案
:
- netstat -n | grep 1.2.3.4:22 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
- netstat -lnpta | grep ssh | egrep “TIME_WAIT | CLOSE_WAIT | ESTABLISHED”
- n [仅限于阿里云]
说明
:
netstat
是追查网络连接问题常用工具,和
grep/awk
结合更是神器,当然如果在阿里云上,还有更方便的方法。
二、从已经备份好的日志中查询数据
问题
:从已备份的
suyun.2017-06-26.log.bz2
日志中,找出包含关键字
1.2.3.4
的日志有多少条。
参考答案
:
- bzcat suyun.2017-06-26.log.bz2 | grep '1.2.3.4' | wc -l
- bzgrep '1.2.3.4' suyun.2017-06-26.log.bz2 | wc -l
- less suyun.2017-06-26.log.bz2 | grep '10.37.9.11' | wc -l
说明
:线上日志文件一般以
bz2
压缩之后保留,如果解压查询,非常耗空间与时间,
bzcat
和
bzgrep
是研发同学必须掌握的工具。
三、备份服务的技巧
问题
:打包备份
/opt/web/suyun_web
目录,排除掉目录中的
logs
和目录,打包好的文件存放在
/opt/backup
目录下。
参考答案
:
tar -zcvf /opt/backup/shenjian.tar.gz \
-
exclude
/opt/web/suyun_web/logs \
/opt/web/suyun_web
说明
:这个命令线上应用较为频繁,在项目需要打包迁移时,常常需要排除掉日志目录,
exclude
是需要掌握的参数。
四、查询线程数
问题
:查询服务器运行服务的总线程数,当机器线程数超报警阀值时,能快速查出相关进程及线程信息。
参考答案
:
- ps -eLf | wc -l
- pstree -p | wc -l
五、磁盘报警,清空最大文件
问题
:找出服务器上,某个正在运行的
tomcat
产生的大量异常日志,找出该文件,并释放空间。不妨设该文件包含
log
关键字,并且大于
1G
。
参考答案
:
第一步,找到该文件
- find / -type f -name "*log*" | xargs ls -lSh | more
- du -a / | sort -rn | grep log | more
- find / -name '*log*' -size +1000M -exec du -h {} \;
第二步,将文件清空
假设找到的文件为
a.log
正确的情况方式应该为:
echo "">a.log
,文件空间会立刻释放。
很多同学:
rm -rf a.log
,这样文件虽然删除,但是因
tomcat
服务仍在运行,空间不会立刻释放
,需要重启
tomcat
才能将空间释放。
六、显示文件,过滤注释
问题
:显示
server.conf
文件,屏蔽掉
#
号开头的注释行
参考答案
:
- sed -n '/^[#]/!p' server.conf
- sed -e '/^#/d' server.conf
- grep -v "^#" server.conf
七、磁盘
IO
异常排查
问题
:磁盘
IO
异常如何排查,类似写入慢或当前使用率较高,请查出导致磁盘
IO
异常高的进程
ID
。
参考答案
:
第一步:
iotop -o
查看当前正在写磁盘操作的所有进程
ID
信息。
第二步:如果此时各项写入指标都很低,基本没有大的写入操作,则需要排查磁盘自身。可以查看系统
dmesg
或
cat /var/log/message
看看是否有相关的磁盘异常报错,同时可以在写入慢的磁盘上
touch
一个空文件看看,是否磁盘故障导致无法写入。