分享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的一些命令

(0)

相关推荐

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

    对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟.这其实是很难的,无论多么厉害的程序员,他写过的代码不可能完全没有问题.而且有些时候,在线上发生问题的时候,我们大部分时间都用在排查并定位问题上了.一个问题可能解决起来也就是几分钟,但是排查起来却要花费几个小时. 在日常工作中,如果我们遇到线上问题,一般的处理步骤应该是先保留现场,然后再考虑回滚,之后再是解决问题.那么,保理现

  • Shell常用服务器日志分析命令总结

    目录 1.查看有多少个IP访问 2.查看某一个页面被访问的次数 3.查看每一个IP访问了多少个页面 4.将每个IP访问的页面数进行从小到大排序 5.查看某一个IP访问了哪些页面 6.去掉搜索引擎统计的页面 7.查看2015年8月16日14时这一个小时内有多少IP访问 8.查看访问前十个ip地址 9.访问次数最多的10个文件或页面 10.通过子域名访问次数 11.列出传输大小最大的几个文件 12.列出输出大于200000byte(约200kb)的页面以及对应页面发生次数 13.如果日志最后一列记录

  • apache日志文件详解和实用分析命令

    一.日志分析 如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log 1).access_log access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式 例如,我的其中一台服务器配置如下: 复制代码 代码如下: CustomLog "| /usr/sbin/rotatelogs /var/log/apache

  • java 开发使用字符串和数字的性能分析

    java 开发使用字符串和数字的性能分析 前言: 分析使用字符串和数字,在软件产品上线后用户较多的情况下,很有必要考虑的问题,这直接体现了用户的体验程度,总不能让用户用着很卡的感觉吧! 在我多年的开发经验中,经常发现的一个情况就是,很多项目的对象字段或者是数据库字段本来是数字类型的,却被定义成字符串类型,这无关痛痒吗? 对于小项目来说,可能没什么影响,反正只要业务逻辑正确即可,性能没什么问题,因为数据也不多,用户也不多. 然而,对于大数据处理来说,这个可不是小事,从字符串替换为数字类型,可以极大

  • java开发微信分享到朋友圈功能

    微信分享功能开发 用了一天时间,把微信发送给朋友和分享到朋友圈功能开发出来,在这里给大家分享一下,避免大家走弯路. 一.服务器端程序 package com.wiimedia.controller; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.ParseException; import

  • java开发微信分享接口的步骤

    微信分享接口的java开发的一些小步骤,具体内容如下 1.配置接口信息进行验证 代码如下: /** * 访问没认证的地址跳转 * * @param request * @return 登录页面 * @throws Exception */ @RequestMapping(value = "/checkWxDomainUrl", method = RequestMethod.GET) public void checkWxDomainUrl(HttpServletRequest requ

  • Java虚拟机GC日志分析

    本文研究的主要是Java虚拟机中gc日志的理解问题,具体如下. 一.日志分析 理解GC日志是处理Java虚拟机内存问题的基本技能. 通过在java命令种加入参数来指定对应的gc类型,打印gc日志信息并输出至文件等策略. 1.编写java代码 public class ReferenceCountingGC { public Object instance = null; private static final int ONE_MB = 1024 * 1024; private byte[] b

  • Java微信分享接口开发详解

    本文实例为大家分享了Java微信分享接口开发的具体代码,供大家参考,具体内容如下 Java微信分享,步骤是 1.根据当前的url,获取signature,nonceStr,timestamp 和appId. 2.通过signature,nonceStr,timestamp 和appId来配置微信 wx.config. 3.通过wx.ready实现微信分享功能. 1.html端 引入微信JS-SDK. <script src="http://res.wx.qq.com/open/js/jwe

  • java开发RocketMQ之NameServer路由管理源码分析

    目录 1.前言 2.路由元信息 3.路由注册 3.1Broker路由注册 3.2NameServer处理路由注册 3.3路由删除 3.3.1Broker异常关闭 3.3.2Broker正常关闭 3.4路由发现 3.5总结 1.前言 NameServer主要作用是为消息消费者和消息生产者提供关于主题Topic的路由信息,那么NameServer需要存储路由的基本信息,还要管理Broker节点,包括路由注册.路由删除等. 2.路由元信息 路由元信息主要由RouteInfoManager来进行管理,这

  • 分享Java常用开发编辑器工具

    目录 1.editplus 1.1官方下载 2.解压就可以使用 2.1vscode 2.2下载 2.3解压建立data 2.4软件常用配置方式settings.json 2.5vscode使用说明及快捷方式 2.6为vscode增加鼠标右键功能 2.7用户代码段设置 2.8清除每次执行java程序的一组长字符串 3.Eclipse 3.1eclipse基本安装使用 3.2Eclipse隐藏菜单栏 3.3关闭spelling检查 3.4启动自动保存功能 3.5代码皮肤代码样式 3.6中英互译项目

随机推荐