发表于: 2017-10-26 19:26:19
1 645
今天完成的事情:
1 补上deploy.sh
find /home/tomcat8/webapps/ -maxdepth 1 -name *.war
从/home/tomcat8/webapps/中查找名称后缀为war的文件,maxdepth指定递归深度为1,即只查找webapps当前目录下的文件,不深入子文件夹。
再拼接|xargs rm -rf 删除之
2 统计访问DB时间,Controller处理时间
统计时间:统计每个方法开始和结束的时间差。也就是每个方法里面都要包含这个统计方法。
这里要用到AOP来处理这个重复劳动,也避免乱入到业务逻辑里。
!不改动其他代码,只增加了一个类就完成了统计DB访问时间的功能!这个就是增强的内涵吧。
("execution(* org.shunly.application.controller.*(..))")
第一个*表示匹配任意的方法返回值,..(两个点)表示零个或多个,上面的第一个..表示service包及其子包,第二个*表示所有类,第三个*表示所有方法,第二个..表示方法的任意参数个数
@Component
@Aspect
public class LogTime {
public static Logger logger = LogManager.getLogger(LogTime.class);
//定义切点,用于复用
@Pointcut("execution(* org.shunly.application.controller..*.*(..))")
public void pointCut(){
}
//环绕式增强,复用切点,必须引入参数ProceedingJoinPoint
@Around("pointCut()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//记录切点前时间
long start = System.currentTimeMillis();
logger = LogManager.getLogger(proceedingJoinPoint.getTarget().getClass());
//让切点动起来
Object object = proceedingJoinPoint.proceed();
//记录切点完成后的时间
long end = System.currentTimeMillis();
//把消耗的时间写入日志
logger.info("耗时" + (end - start) + "ms");
//返回切点对象
return object;
}
}
脚本:
结果:
3 Top
进入top页面
使用权限:所有使用者
使用方式:top [-] [d delay] [q][c] [S] [s] [i] [n] [b]
说明:即时显示process的动态
d :改变显示的更新速度,或是在交谈式指令列( interactive command)按s
q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行
c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来
s :安全模式,将交谈式指令取消,避免潜在的危机
i :不显示任何闲置(idle)或无用(zombie)的行程
n :更新的次数,完成后将会退出top
b :批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内
另外:
监控java线程数:
ps -eLf | grep java | wc -l
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l
明天计划的事情:
任务三总结+任务四开启
遇到的问题:
mvn install命令行打包报错:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
然后clean以后使用idea的Build Artifacts倒是成功了。。。
收获:
首次接触了AOP切面的实际操作,初步了解注解AOP的使用方式,spring-web.xml开启注解 <aop:aspectj-autoproxy/>,新增一个类来实现AOP,@Around注解方法,使之成为环绕增强,控制切入点的前后。
熟悉lunix的各种命令,tail和awk的联合使用等。
评论