发表于: 2017-10-18 20:36:29
1 668
今天完成的任务:
1.写出来nginx响应时间的脚本。
首先说一下自己的思路,就是首先去找一条日志,然后查看一下响应的时间,如下,最后一个是响应时间0.022
183.192.35.5 - - [17/Oct/2017:23:03:08 +0800] "POST /updateStudent HTTP/1.1" 500 17761 "http://hushanxing.net/update?id=17" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3376.400 QQBrowser/9.6.11924.400" "-" "0.022"
然后因为在使用awk命令的时候需要指明这一段时间的位置(比如:$26).所以需要先去找0.022这个数字的位置,可以数空格,每一个空格都隔开了一串字符。另外还可以使用
tail -1 ${LOGPATH} | awk '{print $20}'这个命令先打印一下试试看,看看打印出的是不是需要的,不是再去调整,最后找到第26个是我们需要的。所以可以写成$26.
找到了位置以后就可以使用cat命令去查找信息。
cat /usr/java/nginx/logs/access.log | awk 'BEGIN{sum=0} {if($26<0.050) sum++;} END {print sum}'
在/usr/java/nginx/logs/access.log路径下的access.log日志中去抓取第26位,就是响应时间的信息,然后判断是否小于0.05,最后将所有判断为是的信息数目输出。
用这样的方法就可以达到查看响应时间的目的。
下面是完整的脚本。
tail 命令用来筛选出最后100条信息。
#!/bin/bash
LOG_PATH=/usr/java/nginx/logs/access.log
echo nginx响应时间
echo 统计100次的访问
echo 划分时间段
echo 响应时间0.05s以内的次数
tail -100 ${LOG_PATH}|awk 'BEGIN{sum=0}{if($26<0.05)sum++;}END{print sum}'
echo 响应时间0.05--0.1s的次数
tail -100 ${LOG_PATH}|awk 'BEGIN{sum=0}{if(($26>0.05)&&($26<0.1))sum++;}END{print sum}'
echo 响应时间0.1--0.15s的次数
tail -100 ${LOG_PATH}|awk 'BEGIN{sum=0}{if(($26>0.1)&&($26<0.15))sum++;}END{print sum}'
echo 响应时间0.15--0.2s的次数
tail -100 ${LOG_PATH}|awk 'BEGIN{sum=0}{if(($26>0.15)&&($26<0.2))sum++;}END{print sum}'
echo 响应时间0.2s以上的次数
tail -100 ${LOG_PATH}|awk 'BEGIN{sum=0}{if($26>0.2)sum++;}END{print sum}'
结果:
最后还可以在脚本中所有命令的最后面加上>>time.txt
比如:echo 统计100次的访问>>time.txt 表示讲这句话记录在time.txt文件中。
2.编写脚本统计数据库处理时间。
首先需要在代码log4j的部分设置日志输出位置。
然后指定的文件中查看一下是否输出成功了。
最后和上面一样的方法去统计时间和范围。
使用命令定位时间的位置tail -1 ${LOGPATH} | awk '{print $6}'。第六个位置是我们需要的时间。
编写统计的脚本。
#!/bin/bash
#this file is used to account to DB time
#by chenzui
LOGPATH=/usr/java/resin/log/dbtime.log
echo 统计数据库处理时间
echo 统计100条中的分布
echo 时间在10ms以内
tail -100 ${LOGPATH} | awk 'BEGIN{sum=0} {if(($5~/comNaNteng.service.impl.StudentServiceImpl*/) && ($6<10)) sum++;} END {print sum}'
#tail -1 ${LOGPATH} | awk '{print $6}'
echo 时间在10-20ms以内
tail -100 ${LOGPATH} | awk 'BEGIN{sum=0} {if(($5~/comNaNteng.service.impl.StudentServiceImpl*/) && ($6>10)&&($6<20)) sum++;} END {print sum}'
echo 时间在20ms以上
tail -100 ${LOGPATH} | awk 'BEGIN{sum=0} {if(($5~/comNaNteng.service.impl.StudentServiceImpl*/) && ($6>20)) sum++;} END {print sum}'
结果:
3.使用top命令查看进程
top命令用来监视linux的系统状况,比如cpu,内存的使用。
前面的五行是系统统计的整体信息。
后面的表格是系统进程的详细信息。并且5s刷新一次。
详细的每一个字段的含义太多了。可以查看
http://www.linuxidc.com/Linux/2016-08/133871.htm
4.深度思考。
1.nginx服务器有什么作用?什么叫反向代理?为什么要使用反向代理?
nginx是一个反向代理代理服务器,用于获取客户端发送的请求并且获取到需要的信息返回客户端。这样不需要用户直接和web服务器进行访问。
正向代理:是一个位于客户端和web服务器之间的代理,用来获取客户端发送的请求,客户端转交请求再将获取的内容返回给客户端。代理的是客户端,为客户端收发请求,服务端不知道实际请求端。
反向代理:代理的是服务端,客户端不知道实际请求的服务端。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
反向代理的好处是:
1.单次请求会更快,在高并发的情况下会比其他服务器相应更快。
2可靠性高。由于支持负载均衡,所以在访问量很大的时候会均匀分发给各个不同的服务器。但是会占用比较低的内存资源。解决了服务器过载的情况。
3.扩展性,跨平台。
4.支持热部署,不需要停止服务器再去更新。
2.什么是ssh?如何在linux服务器上从网站下载文件?
ssh 是secure shell 缩写,SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。使用ssh可以加密传输的数据,这样可以防止中间人攻击。
在linux上从网站下载可以使用wget命令
一般的使用方法是: wget + 空格 + 参数 + 要下载文件的url路径,例如
wget http://www.linuxsense.org/xxxx/xxx.tar.gz
wget
还有一些常用的参数。
-b:后台下载,Wget默认的是把文件下载到当前目录。
-O:将文件下载到指定的目录中。
-P:保存文件之前先创建指定名称的目录。
-t:尝试连接次数,当Wget无法与服务器建立连接时,尝试连接多少次。
-c:断点续传,如果下载中断,那么连接恢复时会从上次断点开始下载。
-r:使用递归下载
3.如何写shell脚本?尝试自己编写一个简单脚本。
首先需要知道shell脚本是什么:Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
编写shell脚本 就很简单了,文件头必须是#!/bin/bash 然后把需要执行的命令全部都罗列出来就行。
4.tomcat、jetty、resin各容器有什么区别?如何优化这些容器配置?
这三种容器都是用作web容器,但是jetty和resin比tomcat启动的速度要快一些。tomcat支持的方法多一些。
5.任务三总结
任务三做了十天,其实应该不需要这么多时间,回想起来时间浪费的地方主要在nginx的子域访问,还有项目发布的问题,还有一点就是有点跳,没有踏实的一步一步完成任务,而是做一个大概的结果就下一步,导致了后面用到前面步骤知识的时候又要回去重新完善。所以以后还是需要稳扎稳打,切莫心急。
任务三主要的目的是让我们熟悉服务器发布项目,以及对项目运行情况的了解。
首先执行mvn install 打war包,寻找服务器前面都已经做过了。
然后是将任务二的项目发布到服务器,这里设计了三中web容器的使用,tomcat,jetty,resin。然后自己学习shell语言,写出脚本。脚本就是将需要的命令集合到一个执行文件中,这样省去了自己一步一步的去输入命令的过程。要写脚本首先需要学习shell语言,还有就是需要知道要执行什么命令,完成什么。
比如启动容器的脚本,就是先进入web容器启动的文件,然后执行启动。
发布脚本步骤会多一点但是自己手动的完成一次流程,就可以写出来了。
接下来是nginx的学习,主要就是反向代理,反向代理代理的是服务端,正向代理代理的是客户端。
最后就是编写脚本查看日志统计访问时间。这一部分首先还是需要自己知道到底要干什么,然后需要怎么去做。最后才是写脚本。这一步就是需要我们学会查看日志,找到日志中的信息,然后在使用脚本对大段的日志进行筛选出我们需要的内容。(涉及到awk,grep,SpringAOP打印日志等。)
任务三收获就是学习了各种知识,除此之外,碰到了各种问题也是一种锻炼,不要把困难放大,沉下心总是能学会的。
明天的计划:
准备小课堂。
开始任务4
遇到问题:
脚本写的时候出现了点小问题,就是格式不对。空格还有符号的问题。
收获:
统计时间的脚本终于写好了。。
任务三做完了
最后还有一点就是困难都是纸老虎。。。看起来真的很复杂,静下心慢慢做,一会就做好了。
禅道:任务三完成了。
http://taskNaNteng.com/zentao/project-task-343.html
评论