发表于: 2017-12-21 08:36:06
1 673
今日完成
1.学习shell脚本
(1)编写脚本统计ip访问数和响应时间
#统计statistics.txt里面有多少个ip访问
cat statistics.txt |awk '{print $1}'|sort |uniq > ipnum.txt
#通过shell统计每个ip访问次数
for i in `cat ipnum.txt`
do
iptj=`cat access.log |grep $i | grep -v 400 |wc -l`
echo "ip地址"$i"在2017-4-21日全天(24小时)累计成功请求"$iptj"次,平均每分钟请求次数为:"$(($iptj/1440)) >> result.txt
done
#统计响应时间小于600ms的访问数量
echo "小于600ms响应时间访问数量:"$a >> result.txt
echo "小于600ms响应时间访问数量:"cat ${access} | awk ' {if(s10<600) a=a+1} END{print a;}'
#统计响应时间大于800ms的访问数量
echo "大于800ms响应时间访问数量:"$b >> result.txt
echo "大于800ms响应时间访问数量:"cat ${access} | awk ' {if(s10>800) b=b+1} END{print b;}'
研究了半天还是打印不出响应时间,而且日志格式的设置也有问题。先放一放吧,纠结太长时间了。
2.学习使用AOP统计方法执行时间
(1)学习AOP原理
如前所述,切面能帮助我们模块化横切关注点。简而言之,横切关注点可以被描述为影响应用多处的功能。例如,安全就是一个横切关注
点,应用中的许多方法都会涉及到安全规则。图4.1直观呈现了横切关注点的概念。
图4.1展现了一个被划分为模块的典型应用。每个模块的核心功能都是为特定业务领域提供服务,但是这些模块都需要类似的辅助功能,例如安全和事务管理。横切关注点可以被模块化为特殊的类,这些类被称为切面(aspect)。这样做有两个好处:首先,现在每个关注点都集中于一个地方,而不是分散到多处代码中;其次,服务模块更简洁,因为它们只包含主要关注点(或核心功能)的代码,而次要关注点的代码被转移到切面中了。
(2)了解目前的需求
目前需要统计每次执行controller的时间,那么这里就需要使用切面的思想了。切面的主要增强类有
@Before 前置通知,相当于BeforeAdvice
@AfterReturning 后置通知,相当于AfterReturningAdvice
@Around 环绕通知,相当于MethodInterceptor
@AfterThrowing抛出通知,相当于ThrowAdvice
@After 最终final通知,不管是否异常,该通知都会执行
@DeclareParents 引介通知,相当于IntroductionInterceptor (不要求掌握)
这里使用@Before记录开始执行方法的时间,使用@after记录方法执行结束的时间。这样可以得到执行方法的整个时间差。
(3)切面编程步骤
使用基于注解的开发方式
①导入jar包aspectjrt-1.8.0.jar aspectjweaver-1.8.0.jar
②需要被增强的类
③
使用AspectJ注解形式:
@Aspect
@componet
public class MyAspect {
@Before("execution(* cn.itcast.spring3.demo1.UserDao.add(..))")
public void before(){
System.out.println("前置增强....");
}
}
第四步:创建applicationContext.xml
* 引入aop的约束:
* <aop:aspectj-autoproxy /> --- 自动生成代理:
* 底层就是AnnotationAwareAspectJAutoProxyCreator
使用注解自动扫描
<context:component-scan base-package="lujing"></context:component-scan>
<aop:aspectj-autoproxy />
<bean id="myAspect" class="cn.itcast.spring3.demo1.MyAspect"></bean>
(4)编写切面工具类,添加注解bean标签
(5)查看打印效果
将打印时间的等级设置成info ,然后将log4g的配置也设置成info,只打印info的通知。也可以在log输出文档里面查看相应时间的统计。
2017-12-21 14:08:49 [ http-bio-8080-exec-9:3121 ] - [ INFO ] 方法执行时间:382ms ;
2017-12-21 14:09:10 [ http-bio-8080-exec-10:23659 ] - [ INFO ] 方法执行时间:6349ms ;
2017-12-21 14:09:10 [ http-bio-8080-exec-10:23667 ] - [ INFO ] 方法执行时间:4ms ;
2017-12-21 14:10:02 [ http-bio-8080-exec-11:75282 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:10:15 [ http-bio-8080-exec-11:88610 ] - [ INFO ] 方法执行时间:2233ms ;
2017-12-21 14:10:15 [ http-bio-8080-exec-11:88616 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:14:24 [ http-bio-8080-exec-14:337466 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:14:29 [ http-bio-8080-exec-14:342671 ] - [ INFO ] 方法执行时间:11ms ;
2017-12-21 14:14:34 [ http-bio-8080-exec-14:348192 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:14:39 [ http-bio-8080-exec-14:352654 ] - [ INFO ] 方法执行时间:6ms ;
2017-12-21 14:14:45 [ http-bio-8080-exec-14:358533 ] - [ INFO ] 方法执行时间:5ms ;
2017-12-21 14:16:42 [ http-bio-8080-exec-18:476213 ] - [ INFO ] 方法执行时间:13ms ;
2017-12-21 14:16:48 [ http-bio-8080-exec-18:481473 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:16:51 [ http-bio-8080-exec-18:484591 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:17:05 [ http-bio-8080-exec-18:498622 ] - [ INFO ] 方法执行时间:8338ms ;
2017-12-21 14:17:05 [ http-bio-8080-exec-18:498628 ] - [ INFO ] 方法执行时间:4ms ;
2017-12-21 14:17:10 [ http-bio-8080-exec-18:504055 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:17:14 [ http-bio-8080-exec-18:508041 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:17:17 [ http-bio-8080-exec-18:510624 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:25:15 [ http-bio-8080-exec-14:988363 ] - [ INFO ] 方法执行时间:0ms ;
2017-12-21 14:43:27 [ http-bio-8080-exec-12:2081001 ] - [ INFO ] 方法执行时间:2821ms ;
2017-12-21 14:43:27 [ http-bio-8080-exec-12:2081025 ] - [ INFO ] 方法执行时间:4ms ;
2017-12-21 14:43:33 [ http-bio-8080-exec-12:2086854 ] - [ INFO ] 方法执行时间:86ms ;
2017-12-21 14:43:33 [ http-bio-8080-exec-12:2086867 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:43:37 [ http-bio-8080-exec-12:2090332 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:43:40 [ http-bio-8080-exec-12:2093807 ] - [ INFO ] 方法执行时间:2402ms ;
2017-12-21 14:43:40 [ http-bio-8080-exec-12:2093811 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:43:49 [ http-bio-8080-exec-12:2102614 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:43:50 [ http-bio-8080-exec-12:2103597 ] - [ INFO ] 方法执行时间:85ms ;
2017-12-21 14:43:50 [ http-bio-8080-exec-12:2103601 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:43:51 [ http-bio-8080-exec-12:2104525 ] - [ INFO ] 方法执行时间:5ms ;
2017-12-21 14:43:55 [ http-bio-8080-exec-12:2109111 ] - [ INFO ] 方法执行时间:103ms ;
2017-12-21 14:43:55 [ http-bio-8080-exec-12:2109115 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:44:00 [ http-bio-8080-exec-12:2113482 ] - [ INFO ] 方法执行时间:0ms ;
2017-12-21 14:44:29 [ http-bio-8080-exec-16:2142471 ] - [ INFO ] 方法执行时间:226ms ;
2017-12-21 14:44:29 [ http-bio-8080-exec-16:2142483 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:46:36 [ http-bio-8080-exec-18:2270127 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:46:37 [ http-bio-8080-exec-18:2271142 ] - [ INFO ] 方法执行时间:117ms ;
2017-12-21 14:46:37 [ http-bio-8080-exec-18:2271147 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:46:38 [ http-bio-8080-exec-18:2272077 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:46:39 [ http-bio-8080-exec-18:2272891 ] - [ INFO ] 方法执行时间:51ms ;
2017-12-21 14:46:39 [ http-bio-8080-exec-18:2272895 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:46:40 [ http-bio-8080-exec-18:2273531 ] - [ INFO ] 方法执行时间:4ms ;
2017-12-21 14:46:41 [ http-bio-8080-exec-18:2274326 ] - [ INFO ] 方法执行时间:88ms ;
2017-12-21 14:46:41 [ http-bio-8080-exec-18:2274330 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:46:41 [ http-bio-8080-exec-18:2275161 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:46:42 [ http-bio-8080-exec-18:2275912 ] - [ INFO ] 方法执行时间:41ms ;
2017-12-21 14:46:42 [ http-bio-8080-exec-18:2275916 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:46:43 [ http-bio-8080-exec-18:2276806 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:46:44 [ http-bio-8080-exec-18:2277661 ] - [ INFO ] 方法执行时间:38ms ;
2017-12-21 14:46:44 [ http-bio-8080-exec-18:2277666 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:46:45 [ http-bio-8080-exec-18:2279115 ] - [ INFO ] 方法执行时间:0ms ;
2017-12-21 14:47:11 [ http-bio-8080-exec-14:2305153 ] - [ INFO ] 方法执行时间:205ms ;
2017-12-21 14:47:11 [ http-bio-8080-exec-14:2305163 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:50:16 [ http-bio-8080-exec-12:2489407 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:50:19 [ http-bio-8080-exec-12:2492254 ] - [ INFO ] 方法执行时间:5ms ;
2017-12-21 14:50:20 [ http-bio-8080-exec-12:2493741 ] - [ INFO ] 方法执行时间:115ms ;
2017-12-21 14:50:20 [ http-bio-8080-exec-12:2493747 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:50:25 [ http-bio-8080-exec-12:2498473 ] - [ INFO ] 方法执行时间:1ms ;
2017-12-21 14:50:27 [ http-bio-8080-exec-12:2500251 ] - [ INFO ] 方法执行时间:36ms ;
2017-12-21 14:50:27 [ http-bio-8080-exec-12:2500254 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:50:31 [ http-bio-8080-exec-12:2504374 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:50:33 [ http-bio-8080-exec-12:2507033 ] - [ INFO ] 方法执行时间:100ms ;
2017-12-21 14:50:33 [ http-bio-8080-exec-12:2507040 ] - [ INFO ] 方法执行时间:5ms ;
2017-12-21 14:50:51 [ http-bio-8080-exec-12:2524613 ] - [ INFO ] 方法执行时间:3ms ;
2017-12-21 14:50:53 [ http-bio-8080-exec-12:2527019 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:50:56 [ http-bio-8080-exec-12:2529367 ] - [ INFO ] 方法执行时间:100ms ;
2017-12-21 14:50:56 [ http-bio-8080-exec-12:2529371 ] - [ INFO ] 方法执行时间:2ms ;
2017-12-21 14:56:03 [ http-bio-8080-exec-17:2836714 ] - [ INFO ] 方法执行时间:0ms ;
一共执行76次,超过100毫秒的10次,其余小于100毫秒。
2.实现restful接口
(1)弄清楚restful的实质。
①一个uri就是一个资源,uri就是典型的url。
②PUT,DELTE,POST,GET 四种方法都有自己独特的用处。
(2)uri中名称的实现
<!-- 浏览器不支持put,delete等method,由该filter将/xxx?_method=delete转换为标准的http delete方法 -->
遇到问题
1.之前任务2做的restful风格都有问题,今天重新梳理了一遍。
2.SMM 框架时间日期类型处理的问题。
明日计划
1.任务三总结。
2.解决任务2中时间日期类型的处理问题。
3.看一下HTTP协议,复习一下其中的知识点。
收获:
1.学习日志打印的重要性,对排错,查看项目性能等有很大的帮助。
评论