设为首页 收藏本站
查看: 936|回复: 0

工程师追查线上问题(或运维)常用的shell命令(http://www.cnblogs.com/clam/archive/2012/03/29/2423084.

[复制链接]

尚未签到

发表于 2015-10-26 10:37:42 | 显示全部楼层 |阅读模式
工程师追查线上问题(或运维)常用的shell命令
  shell本身是非常强大的,而工程师在追查线上问题时,如何能够更加快速更加有效的定位问题,用好shell非常关键。下面是我总结的几个在追查问题时常用的shell命令。大家可以参考下。大家有好的命令,也可以在这之上完善。
  1、日志分析类:
  (1)

cut -d ‘’ -f4 wap_log |sort |uniq -c
  
  比如cpu idle急剧下降,要看一下当前的流量如何,是否是由于流量突增引起。可以使用该命令:
  其中wap_log是日志名,4 是时间那一列,简单介绍下这个shell命令。
  这是一行实例日志行:
  218.203.63.190 - - [09/Feb/2012:12:15:03 +0800] "GET /view/102795.html HTTP/1.1" 200 4557 "-" "MAUI WAP Browser" "jid=XKYGPzLXwG!70061790;$path=/" 76
  在这个shell命令中,cut先根据空格分隔符对日志行进行分割,然后取第4个field,也就是时间,取到时间后,对时间进行排序,排序后,再去重,计数。这样就可以输出每个时间段的日志浏览量。
  下面是改shell的输出实例:
  18 [09/Feb/2012:12:54:51
  14 [09/Feb/2012:12:54:52
  11 [09/Feb/2012:12:54:53
  10 [09/Feb/2012:12:54:54
  12 [09/Feb/2012:12:54:55
  15 [09/Feb/2012:12:54:56
  11 [09/Feb/2012:12:54:57
  第一列是个数,第二列是时间,当然,也可以针对于这个在后面再用awk任意发挥,比如找出浏览量大于x的时间段,等等。这样就可以清楚的看到,每个时间点的请求数,从而判定是否是请求数过大导致。
  (2)

cat access_log |awk  'BEGIN{sum=0;count=0;}{sum+=$NF;count++;}END{printf("sum=%d,count=%d,avg=%f\n",sum,count, sum/count)}'
  access_log为日志名,用awk切割后,$NF为最后一个域,就是耗时域,所以这条命令的作用就是计算平均耗时。
  下面是该shell的实例输出:
  sum=3121224,count=96000,avg=32.512750
  2、性能分析类:
  (1)

ps aux | sort –n –k 5 | tail
  得到耗内存最大的10个进程。
  ps aux 就不用解释了,后面sort,-n代表按照数字大小进行排序,-k代表排序的key  6 代表第6列,第6列就是占用内存大小列。
  下面是输出:
  **     11800  0.0  0.0 261652 49316 ?      S     2011   3:32 **.
  **     11801  0.0  0.0 261652 49316 ?      S     2011   3:33 **.
  **    11802  0.0  0.0 261652 49316 ?      S     2011   3:33 **.
  **    11803  0.0  0.0 261652 49316 ?      S     2011   3:33 **.
  **     11804  0.0  0.0 261652 49316 ?      S     2011   3:33 **.
  **    11805  0.0  0.0 261652 49316 ?      S     2011   3:32 **.
  **     25511  0.0  0.0 261652 49316 ?      S     2011   1:15 **.
  **    25512  0.0  0.0 261652 49316 ?      S     2011   0:00 **.
  **     28391  1.4  0.5 547488 369664 ?     Ssl  Jan16 501:58 **
  (**为用户名和进程名,已隐藏。)
  (2)

ps aux | sort –n –k 4 | tail
  同理,这是得到cpu消耗最大的10个进程
  (3)

lsof
  当然lsof不属于性能分析类,但是该命令又经常会用到:
  

lsof filename
  显示开启filename这个文件的进程名
  

lsof –i:8099
  查看开启8099端口的进程
  (4)
  netstat
  查找端口的进程名除了用lsof外,也可以用netstat,
  直接netstat –nlp | grep port即可
  
  不过一般只有root权限才可以用lsof,普通用户的话,可以使用/usr/sbin/lsof 不过一般没有太多有价值的信息。
  3、其他类:
  (1)rsync命令
  rsync命令一般用来和线上机同步代码,那他和scp有什么不同呢? 一个是rsync命令可以方便的exclude,scp无法方便的exclude.另外,有一个很重要的不同是,rsync可以保持软链,但scp不能保持软链。就是说,scp在执行过程中,不会识别软链,而是直接当做普通文件夹来处理。另外,比较重要的是,rsync为增量同步,scp为全量
  一般同步命令如下:

rsync -av –bwlimit=2000 –progress –exlude=”log” 源地址  目标地址
  -av这个参数大家可以到网上搜下,这里就不再详解了,av这个参数,如果没有特殊需求,就把这个参数带上。
  --bwlimit是限速,单位是kb
  --progress代表是显示同步进度
  --exclude代表,不同步的文件夹,这个文件夹是基于源地址的,也就是说比如exclude写的是log,源地址写的是/home/xx/ 那么,不同步的文件夹就是/home/xx/log。
  
  好,对于shell命令,我就先写这么多,大家也可以基于这些命令自由发挥,拼接出更有价值的命令。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130881-1-1.html 上篇帖子: shell 内建命令、 函数和外部命令 下篇帖子: shell之变量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表