一, 查看日志
线上出现了问题, 登上线上的机器查日志是非常常见的操作了. 我第一次登上线上机器查日志的时候, 我还只记得以下的几个命令(假设现在我们的日志文件叫做 service.log):
- cat service.log
- tail -f service.log
- VIM serivice.log
- (明显是不够用的)
现在日志每天产出的大小大概 1GB:
每天产出 1GB 大小的日志
每天产出 1GB 大小的日志
如果是小文件的话, 单纯的 cat 命令还是可以应付的, 但如果你直接用 cat 命令打开一个 1GB 的日志文件, 保证卡死你(ctrl + c 退出 cat 命令需要很久才能将 cat 命令停下来).
一般我只用 cat 来查看这个小文件的文本内容是什么
同样地, 如果是小文件, 单纯的 VIM 命令去打开文件也是可以应付的, 但如果你用 VIM 命令去打开一个 1GB 甚至更大的文件, 也能明显感受到缓慢和卡顿.
平时我还是很喜欢用 VIM 去查找对应的记录的, 我一般的操作:
VIM service
按 G 跳转到文件的末尾
按? + 关键字搜索对应的记录
按 n 往上查询, 按 N 往下查询
tail -f service.log 这个命令我一般用于查看流量是否进来了(或者调试的时候可以直接看到日志, 再迅速 ctrl +c 关掉)
面对比较大的日志文件, 这我们就得配合 grep 来玩了, 比如我们现在得知某个手机号收不到短信验证码, 想要看一下这个手机号的日志是怎么样的. 于是我们就可以这样搞:
cat service.log | grep 13888888888
这么一搞, 就能将 service.log 中所有含有 13888888888 的记录给搜出来, 搜索的速度还是贼快的.
检索日志
检索日志
现在我们已经能根据关键字搜到对应的记录了, 接着我想看一下那条记录的日志上下文[这样就能知道这条数据大概的执行状态了]
首先, 我们先要查出对应记录的行号, 在 cat 命令后面加上一个 -n 参数就好了. 所以命令是: cat -n service.log | grep 13888888888 , 如下图我们就可以查到对应的行号了
查看行数
查看行数
现在行数是 29506, 我们一般只要看一下 29506 的前 10 行和后 10 行就差不多知道问题出现在哪了, 于是我们可以这样做:
sed -n "29496,29516p" service.log: 从 29496 行开始检索, 到 29516 行结束
cat -n service.log | tail -n +29496 | head -n 20: 从 29496 行开始检索, 往前推 20 条
如果关键字不太准确(日志输出的记录太多了), 我们可以使用 more 命令来浏览或者输出到文件上再分析:
cat service.log | grep 13 |more : 将查询后的结果交由 more 输出
cat service.log | grep 13> /home/sanwai/aa.txt 将查询后的结果写到 / home/sanwai/aa.txt 文件上
有的时候, 我们想统计这个日志输出了多少行, 我们可以使用这条命令:
cat service.log | wc -l
查看行数
查看行数
参考资料:
https://www.cnblogs.com/xiashan17/p/7059978.html
二, 查进程和端口
查进程有两个命令:
ps -ef
ps aux
上面两个命令都是列出所有的进程, 我们还是通过 | 管道和 grep 来过滤掉想要查的进程, 比如说: ps -ef |grep java
把进程查出来干嘛? 知道它的进程 ID 了, 我们可以把他给杀掉.
kill -9 processId: 杀掉某个进程
查端口也是一个很常见的操作, 常见命令: netstat -lntup:
l:listening n:num t:tcp u:udp p:display PID/Program name for sockets
查看当前所有 tcp/udp 端口的信息
查看某个端口详细的信息: lsof -i:4000
查看某个端口的详细信息
查看某个端口的详细信息
三, 查看系统的状态
3.1 TOP 实时查看进程的状态
TOP 命令查看进程的状态, 其中有个 load average 可能不是那么好理解, 下面来解释一下:
load average: 在特定时间间隔内运行队列中 (在 CPU 上运行或者等待运行多少进程) 的平均进程数.
load average 有三个值, 分别代表: 1 分钟, 5 分钟, 15 分钟内运行进程队列中的平均进程数量.
正在运行的进程 + 准备好等待运行的进程 在特定时间内 (1 分钟, 5 分钟, 10 分钟) 的平均进程数
Linux 进程可以分为三个状态:
阻塞进程
可运行的进程
正在运行的进程
比如现在系统有 2 个正在运行的进程, 3 个可运行进程, 那么系统的 load 就是 5,load average 就是一定时间内的 load 数量均值.
3.2free 查看内存使用状况
Linux 的内存管理机制的思想包括 (不敢说就是) 内存利用率最大化, 内核会把剩余的内存申请为 cached, 而 cached 不属于 free 范畴.
如果 free 的内存不够, 内核会把部分 cached 的内存回收, 回收的内存再分配给应用程序. 所以对于 Linux 系统, 可用于分配的内存不只是 free 的内存, 还包括 cached 的内存(其实还包括 buffers).
可用内存 = free 的内存 + cached 的内存 + buffers
Buffer Cache 和 Page Cache. 前者针对磁盘块的读写, 后者针对文件 inode 的读写. 这些 Cache 有效缩短了 I/O 系统调用 (比如 read,write,getdents) 的时间. 磁盘的操作有逻辑级 (文件系统) 和物理级(磁盘块)
参考资料:
https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
最后
我工作时长比较短, 所以可能会有很多命令会忽略掉了, 欢迎在评论区补充比较常用的命令. 后续如果某些命令比较常见的, 我再分享哈~
来源: https://www.cnblogs.com/qiaogeli/p/11279890.html