场景1:张三负责线上一个服务,使用java语言开发的。有一天,他收到报警,大概意思就是服务不能用,这个时候,老板让他查下是什么原因?
下面是张三的处理过程?
ps -aux | grep -v 'grep' | grep java --color=auto
发现没有这个服务的java进程,张三给老板说,这个服务停了。这个事情算是搞定了。
发现这个服务的进程是存在的,张三执行下面的命令,看下这个服务的监听的端口,
查看运行中的进程,比如进程的名字包含“reactor”字眼,那么命令如下:
pgrep -f reactor
netstat -lnpt
张三看到了这个监听的端口是有的,但是看不到哪个是进程占用的,因为张三的权限问题,张三切换成root角色权限的用户,假设叫niubi
sudo -u niubi -i
张三看到了占用这个端口的进程,lsof -i:端口,然后张三想看下监听这个端口的进程和刚才用ps -ef | grep -v ‘grep’ | grep java 查到的进程是啥关系,然后张三使用了如下命令,
pstree
但是,张三看不出什么,张三又执行了pstree -Aup
这个时候张三发现,这两个进程的父子关系,然后就断定,进程没问题,端口没问题,那么怎么办呢?其实,本应该去看应用的日志的,哎,还是去看应用日志吧。
日志文件都存放到一个指定目录,假设为/var/apps/log
这个目录下面有很多的日志,张三,先执行如下命令: ls -ls 这么多日志,怎么看,张三找到了当天的日志,假设是app.log.2015-09-12
张三使用命令
less -MN app.log.2015-09-12
然后输入error,没啥收获,然后张三执行命令:
cat app.log.2015-09-12 | grep Exception --color=auto
发现很多异常,张三想看下有多少,然后执行了命令
cat app.log.2015-09-12 | grep Exception | wc -l
(或者grep Exception app.log.2015-09-12)
哇塞,还挺多,问题很严重!
不过从日志中,经过分析可能是IO方面的问题,张三决定看下机器的负载情况。
找到一个当前运行的指定的格式的日志文件,有一种简便的方法(这里使用了反引号和pgrep来获取myservice的进程Id(pid)),如下:
tail -n100 -f /data/log/192.168.218.141-`pgrep -f myservice_id`-2017-09-05.0.log
从上面的这个例子,可以看出反引号的功能使用场景;
查看有几个cpu的方法如下:
输入top,然后输入1即可
张三执行了命令top
张三看了几个cpu,和内存使用情况,然后看了眼有无僵尸(zombie)进程
,应该没啥问题,然后张三又看了下磁盘使用情况:
df -hl
查看占用资源厉害的进程的方法如下:
输入top,然后shift + p即可查看
也没啥问题,然后看下当前目录的总量占用情况,执行命令:du -sh ./
也没啥问题,执行du -sh *命令,看了每个日志文件的大小,也没啥,
张三实在是解决不了问题了,抓狂!!!!!
有一天,张三启动一个需要打开很多文件的程序,总是打不开文件,凭着经验,张三想应该是用命令看下:ulimit -a
发现,原来系统的文件打开数量限制是1024,而张三想看下当前打开的有多少,执行命令lsof | wc -l
然后张三调整了ulimit大小,就OK了。
压缩目录/data/log下的所有文件,文件名字为datalog.zip,命令如下
zip -r datalog.zip /data/log/
后来,张三学习了以下命令:
物理cpu的个数如下所示:
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
每个物理CPU中core的个数(即核数),如下:
cat /proc/cpuinfo| grep 'cpu cores' | uniq
查看内存使用情况:
free -m
查看硬盘使用情况:
fdisk -l
df -h
查看目录下子文件占用磁盘情况命令如下(max-depth表示递归的目录层级):
du -h --max-depth=1 ./
查看I/O性能:
iostat
查看负载
uptime
查看系统内核
uname -a
查看使用的Linux发行发版的相关信息:
lsb_release -a
查询PCI设置
lspci
查询网卡型号
lspci | grep Ether
查看系统路由表
route -n
或者通过如下命令:
netstat -r
追踪网路数据包的路径
traceroute www.163.com
场景3:张三的公司的机器上的命令有很多都弄成别名了,张三想看下,
然后张三执行如下命令:
alias
奇技淫巧