分享Java开发必须掌握的日志分析命令

 更新时间:2019年07月21日 14:22:32   作者:Hollis  
这篇文章主要介绍了分享Java开发必须掌握的日志分析命令,在日常工作中,如果我们遇到线上问题,一般的处理步骤应该是先保留现场,然后再考虑回滚,之后再是解决问题

对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很难的,无论多么厉害的程序员,他写过的代码不可能完全没有问题。而且有些时候,在线上发生问题的时候,我们大部分时间都用在排查并定位问题上了。一个问题可能解决起来也就是几分钟,但是排查起来却要花费几个小时。

在日常工作中,如果我们遇到线上问题,一般的处理步骤应该是先保留现场,然后再考虑回滚,之后再是解决问题。那么,保理现场保留的是什么的?至少要包括当时机器上面的线程的dump、堆内存的dump还有最重要的就是日志。因为很多时候,日志可能是我们了解程序执行的唯一途径。

有了日志,还要掌握一些命令,才能更好的、更高效的定位问题,因为一旦发生线上问题的时候,真的是分秒必争。本文,为你总结了几个常用的命令和简单用法,以及几个小案例来运用这些命令。

在介绍之前我还要强调一点,有很多朋友说,我不需要会这么多命令,一个vim(vi)命令就够我用了,请不要在服务器上直接对日志文件进行vim(vi)操作,这样可能会导致机器直接挂掉。

cat 查看文件的内容
cat命令是一个显示文本文件内容的便捷工具,如果一个日志文件比较小,可以直接使用cat命令将其内容打印出来,进行查看,但是,对于较大的日志文件,请不要这样做,打开一个过大的文件可能会占用过多的系统资源,从而影响系统对外的服务。

命令格式:

cat [选项] [文件]...

more 分页显示文件

cat的缺点在于,一旦执行后,便无法再进行交互和控制,而more命令可以分页的展现文件内容,按enter键显示文件下一行,按空格键便显示下一页,按 f键显示下一屏内容,按b键显示上一屏内容。

命令格式:

more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]

less 分页显示文件

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

命令格式:

less [参数] 文件

tail 显示文件尾

使用tail命令能够查看到文件最后几行,这对于日志文件非常有效,因为日志文件常常是追加写入的,新写入的内容处于文件的末尾位置。

使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.

命令格式;

tail[必要参数][选择参数][文件]

head 显示文件头
与tail命令类似,但是不同的是head命令用于显示文件开头的一组行。

命令格式:

head [参数]... [文件]...

sort 内容排序
一个文件中包含有众多的行,经常需要对这些行中的某一列进行排序操作, sort命令的作用便是对数据进行排序。

命令格式:

sort [参数][文件]

wc 字符统计
wc命令可以用来统计指定文件中的字符数,字数,行数,并输出统计结果。

命令格式:

wc [选项]文件...

uniq 查看重复出现的行
uniq命令可以用来显示文件中行重复的次数,或者显示仅出现一次的行,以及仅仅显示重复出现的行,并且,uniq的去重针对的只是连续的两行,因此它常常与sort结合起来使用。

命令格式:

uniq[选项][参数]

curl URL访问工具
要想在命令行下通过HTTP协议访问网页文档,就不得不用到一个工具,这便是curl,它支持HTTP,HTTPS,FTP,FTPS,Telnet等多种协议,常被用来在命令行下抓取网页和监控WEB服务器状态。

命令格式:

curl [option] [url]

查看请求访问量
对于在线运行的系统来说,常常会碰到各种不怀好意的恶意攻击行为,其中比较常见的便是HTTP flood,也称为CC攻击。如何能够快速的定位到攻击, 并迅速响应,便成为开发运维人员必备的技能。定位问题最快捷的办法,便是登录到相应的应用,查看访问日志,找到相应的攻击来源,如访问量排名前10的ip地址:

cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10

页面访问量排名前10的url:

cat access.log | cut –f4 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10

查看最耗时的页面
对于开发人员来说,页面的响应时间是非常值得关注的,因为这直接关系到用户能否快速的看到他想看到的内容。因此,开发人员常常需要将响应慢的页面找出来,进行优化:

cat access.log | sort -k 2 -n -r | head -10

统计404页面占比
对于请求的返回码,有些时候也是需要关注的,比如,如果404请求占比过多, 要么就是有恶意攻击者在进行扫描,要么就是系统出现问题了,同样,对于 500的请求也是如此,可以通过如下命令来查看404请求的占比:

export total_line=`wc -l access.log | cut -f1 -d " "` && export not_found_line=`awk '$6=='404'{print $6}' access.log | wc -l` && expr $not_found_line \* 100 / $total_line

更多的需要结合linux的一些命令

相关文章

  • Java面试题冲刺第十九天--数据库(4)

    Java面试题冲刺第十九天--数据库(4)

    这篇文章主要为大家分享了最有价值的三道关于数据库的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot实现邮件推送的详细代码

    SpringBoot实现邮件推送的详细代码

    在项目中经常会遇到SpringBoot推送消息的业务,除了站内推送通知,邮件推送也是一种常见的方式,本文小编就带大家实现邮件推送,文中有详细代码讲解,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • SpringBoot2整合Redis缓存三步骤代码详解

    SpringBoot2整合Redis缓存三步骤代码详解

    这篇文章主要介绍了SpringBoot2整合Redis缓存三步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 解决Mybatis返回update后影响的行数问题

    解决Mybatis返回update后影响的行数问题

    这篇文章主要介绍了解决Mybatis返回update后影响的行数问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java实现帧动画的实例代码

    Java实现帧动画的实例代码

    这篇文章主要介绍了Java实现帧动画的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Javaweb基础入门requse原理与使用

    Javaweb基础入门requse原理与使用

    Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量,接下来本篇将详细讲述
    2021-11-11
  • 从Android源码剖析Intent查询匹配的实现

    从Android源码剖析Intent查询匹配的实现

    这篇文章主要介绍了从Android源码剖析Intent查询匹配的实现,Intent部分的源码为Java代码,需要的朋友可以参考下
    2015-07-07
  • java中单双斜杠的使用图文详解

    java中单双斜杠的使用图文详解

    JAVA中的斜杠有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,下面这篇文章主要给大家介绍了关于java中单双斜杠使用的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • java使用compareTo实现一个类的对象之间比较大小操作

    java使用compareTo实现一个类的对象之间比较大小操作

    这篇文章主要介绍了java使用compareTo实现一个类的对象之间比较大小操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 详解Mybatis多参数传递入参四种处理方式

    详解Mybatis多参数传递入参四种处理方式

    这篇文章主要介绍了详解Mybatis多参数传递入参四种处理方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论