申报小高不符合条件吊柜会不会掉下来被打下来?

在高并发的情况下小小的日志打印会严重影响到性能。
以前编程不喜欢对每个功能、重要的方法进行日志的格式化输出,即使要输出,也没按照规范进行输出。前段时间,随着我们平台用户量不断增加,出现些问题。当用户遇到问题,就给我们客服打电话。然后客服毫无疑问就来找我们。当我们接收到这样问题的时候,我们首先要定位是什么原因造成的。当时就是因为自己方法中输出的日志很少,而且不规范,所以根本找不到具体原因,虽然最后问题解决了,但是花费很多不必要的时间。
那么我们怎样使用好日志这一利器呢?
1.写好日志:
我们先来看一下糟糕的日志打印:
@ResponseBody
@RequestMapping(value = &unbind.do&, method = RequestMethod.POST)
public Object unbind(String bankId, String memberId) {
if (StringUtils.isBlank(bankId) || StringUtils.isBlank(memberId)) {
return new Result(false, &解绑参数不合法!&);
authPayTwoService.unbind(bankId, memberId);
} catch (AppException e) {
(&认证支付2.0(unbind)失败:{}&,e);
return new Result(false, e.getMessage());
} catch (Exception e) {
(&认证支付2.0(unbind)]失败:{}&,
return new Result(false, &解绑银行卡失败,请重试&);
return new Result(true, &解绑银行卡成功!&);
上面代码是严格不符合规范的,每个公司都有自己的打印要求。首先日志的打印必须是以logger.error、logger.warn或的方式打印出来。日志打印格式应包含[系统来源] 错误描述 [关键信息],日志信息要能打印出能看懂的信息,有前因和后果。方法的入参和出参也要考虑打印出来。
好的日志格式打印:
@ResponseBody
@RequestMapping(value = &unbind.do&, method = RequestMethod.POST)
public Object unbind(String bankId, String memberId) {
(&[解绑银行卡--认证支付2.0][params:bankId=& + bankId + &,memberId=&
+ memberId + &]&);
if (StringUtils.isBlank(bankId) || StringUtils.isBlank(memberId)) {
return new Result(false, &解绑参数不合法!&);
authPayTwoService.unbind(bankId, memberId);
} catch (AppException e) {
LOG.error(&[解绑银行卡--认证支付2.0(unbind)-mas][error:{}&,e);
return new Result(false, e.getMessage());
} catch (Exception e) {
LOG.error(&[解绑银行卡--认证支付2.0(unbind)][error:{}&,e);
return new Result(false, &解绑银行卡失败,请重试&);
return new Result(true, &解绑银行卡成功!&);
从上面的代码可以很轻松的定位方法、传入的参数及异常是调用接口抛出的异常还是系统级的异常。
2.良好的日志输出格式
最近测试同事采用两百并发对项目进行测试。
格式优化前:
经过测试查看每秒的并发量平均只有110多如下图:
通过查看jvm 虚拟机发现很多日志线程出现BLOCKED,如下:
&http-saoma%2F192.168.6.162-& daemon prio=10 tid=0x00002aaab88e4800 nid=0x2c8e runnable [0x4000]
java.lang.Thread.State: BLOCKED
at java.lang.Throwable.getStackTraceElement(Native Method)
at java.lang.Throwable.getOurStackTrace(Throwable.java:591)
- locked &0x90d0& (a java.lang.Throwable)
at java.lang.Throwable.getStackTrace(Throwable.java:582)
at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.log4j.spi.LocationInfo.(LocationInfo.java:139)
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:253)
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:500)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:506)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310)
at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:369)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
- locked &0xfb1e00& (a org.apache.log4j.DailyRollingFileAppender)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
- locked &0x20a0& (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.slf4j.impl.Log4jLoggerAdapter.error(Log4jLoggerAdapter.java:497)
我们定位org.apache.log4j.spi.LocationInfo类的代码如下:
// Protect against multiple access to sw.
synchronized(sw) {
t.printStackTrace(pw);
s = sw.toString();
sw.getBuffer().setLength(0);
//System.out.println(&s is [&+s+&].&);
int ibegin,
// Given the current structure of the package, the line
// containing &org.apache.log4j.Category.& should be printed just
// before the caller.
// This method of searching may not be fastest but it's safer
// than counting the stack depth which is not guaranteed to be
// constant across JVM implementations.
ibegin = s.lastIndexOf(fqnOfCallingClass);
从上面可以看出在该方法中用了synchronized锁,然后又通过打印堆栈来获取行号。那么肯定会影响到性能的,我们通过看
此时log4j.properties日志文件配置的输出格式为:
%d %-5p %c:%L [%t] - %m%n
很明显就是%l输出行号的问题,那么我们把%l去掉结果会不会好很多呢?
把log4j.properties文件中输出格式改为:
%d %-5p %c [%t] - %m%n
输出格式优化后:
再看每秒的并发量如下图:
从图中我们可以看出并发量提高了40多,同时jvm线程日志中java.lang.Thread.State: BLOCKED也没有了。看来程序的性能和日志的输出格式也有很大的关系,希望看到此文的朋友们多多优化自己的日志和输出格式。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'待解决问题&
2015年洛阳市中小学小高职称评定结果
2015年洛阳市中小学小高职称评定结果
更新时间: 20:03
2011年河北省高级工程师职称评定结果出来了吗
不晓得,你去职称网看看吧。 2011年中学高级职称评审经过哪几个单位 vb不
洛阳市助理工程师职称评定在哪里申请,联系电话多少
跟随 已跟随 取消 确定 职称科(职称评价服务中心)办公地址:洛南新区太康路与市府西街交叉口洛阳市农业局5楼上) 职称评价服务中心504、506室办理事项:各种资格、聘任证书的办理及发放;中级申报材料的接收和整理;各系列申报初级专业技术职务的初审;洛阳职称网站的日常维护;评审费用的收取等。(负责人:彭世赞工作人员:郭宏兵 李雯雯 赵艳艳 联系电话:19456)
2011年河南省洛阳市中小学教师高级职称评定时间
已经开始了。
2008年桂林工程类中级职称评定
08年的未出,请参考07年【DOC】职称改革工作领导小组办公室文件文件格式:DOC/Microsoft Word - HTML版1,送桂林市评审:10月31日以前为个人准备,申报,公示,审议,答辩阶段,11月1日至8日为各单位,各系列职改办审核,...2,桂林市中级专业技术资格评审委员会评审范围及相应系列职改办一览表(附件2). 3,年度取得初,中级专业技术资格人员... 151K
听说2010年山东省中小学中专技校高级教师职称评审结果出来了,怎么才能找得到
到山东教育人事网上可以查到
辽宁葫芦岛中级工程师职称评定什么时候能出结果
2011年3月份
深圳职称评定与档案问题
助理工程师资格取得有三条途径,你要看你的具体情况是符合那一种:第一种是大中专毕业生初次认定,这类是针对你所学专业和从事专业对口的专业技术人员,学历是全日制国家统一计划内招生的;第二种是考试,国家有些专业是开考了的,有些不在考试范围之列;第三种是评审,如果你在专业技术工作岗位上工作,所学学历和从事专业不对口,或学历不符合认定要求,就可以申请评审,评审一年一次,具体资料和条件你可以到人事局专业技术人员网页上看看。
2015年包头有哪些中小学辅导学校?学大高三语文补习咨询
要积极思考语文老师提出的每一个问题;要认真观察老师的每一个演示实验;要大胆举手发表自己的看法,认真参加讨论,有选择地记笔记等。由于积极参与课堂的学习活动,专注于课堂学习的中心内容,自然就不容易发生“走神”现象了。 学大辅导效果也是很好的哦 效果也是不错的 值得您家的孩子去的 机构的联系方式我给您找来了哦,希望能帮到你哦 包头学大教育各校区免费咨询电话 【昆都仑区】 包百学习中心一一一一一400 04 【青山区】 包头大世界校区一一一一400 03 包头万达学习中心一一一400 05 更多内容可以逛一逛52求学网论坛-全国最具影响力的教育社区
2015年包头为何要加固中小学校舍?
为了全面推进校舍安全工程建设,教育主管部门决定,从下周开始,全市所有中小学,包括高中,将执行上六天课,周日休息一天的作息时间。同时,暑假将从6月20日开始,到9月20日结束,放假三个月。 今年,我市将要完成中小学校舍安全工程60%的工程量,涉及180万平方米的校舍加固、重建、拆建任务。为了做好此项工作,教育主管部门决定,从下周开始到今年12月31日,全市所有中小学、包括高中都将执行上六天课,周日休息一天的作息时间。因此,暑假时间也有相应的调整:今年,全市所有学校6月20日开始放暑假,9月20日开学。在放假的这三个月里,我市将集中力量,加班加点做好中小学校舍改造重建工作,确保把学校建成最安全、家长最放心的地方。 是全国下来文件全部改革加固小学校舍的 呵呵 因为要防治意外发生 因为校舍都已老化年
2011年河北省建筑助理工程师职称评定时间
应该是你准备好材料,填写《专业技术职务呈报表》并由所在单位盖章,将呈报表、毕业证原件及复印件、一张小二寸的两张一寸、8元工本费交到省人才中心,你材料准备好,随时都可以。
不晓得,你去职称网看看吧。 2011年中学高级职称评审经过哪几个单位 vb不...
跟随 已跟随 取消 确定 职称科(职称评价服务中心)办公地址:洛南新区太康路与市府西街交叉口洛阳市农业局5楼上...
已经开始了。...
&本站QQ官方微博:@jixiaoJE &
Copyright &&&(JE中专网)&&All Rights Reserved.
网站版权与免责声明
①由于各方面不确定的因素,有可能原文内容调整与变化,本网所提供的相关信息请网友以权威部门公布的正式信息为准.
②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权及个人隐私等问题,请在两周内邮件联系问题集锦(25)
并发编程(6)
以前编程不喜欢对每个功能、重要的方法进行日志的格式化输出,即使要输出,也没按照规范进行输出。前段时间,随着我们平台用户量不断增加,出现些问题。当用户遇到问题,就给我们客服打电话。然后客服毫无疑问就来找我们。当我们接收到这样问题的时候,我们首先要定位是什么原因造成的。当时就是因为自己方法中输出的日志很少,而且不规范,所以根本找不到具体原因,虽然最后问题解决了,但是花费很多不必要的时间。那么我们怎样使用好日志这一利器呢?1.写好日志:我们先来看一下糟糕的日志打印:@ResponseBody
@RequestMapping(value = &unbind.do&, method = RequestMethod.POST)
public Object unbind(String bankId, String memberId) {
if (StringUtils.isBlank(bankId) || StringUtils.isBlank(memberId)) {
return new Result(false, &解绑参数不合法!&);
authPayTwoService.unbind(bankId, memberId);
} catch (AppException e) {
(&认证支付2.0(unbind)失败:{}&,e);
return new Result(false, e.getMessage());
} catch (Exception e) {
(&认证支付2.0(unbind)]失败:{}&,
return new Result(false, &解绑银行卡失败,请重试&);
return new Result(true, &解绑银行卡成功!&);
}上面代码是严格不符合规范的,每个公司都有自己的打印要求。首先日志的打印必须是以logger.error、logger.warn或的方式打印出来。日志打印格式应包含[系统来源] 错误描述 [关键信息],日志信息要能打印出能看懂的信息,有前因和后果。方法的入参和出参也要考虑打印出来。好的日志格式打印:@ResponseBody
@RequestMapping(value = &unbind.do&, method = RequestMethod.POST)
public Object unbind(String bankId, String memberId) {
(&[解绑银行卡--认证支付2.0][params:bankId=& + bankId + &,memberId=&
+ memberId + &]&);
if (StringUtils.isBlank(bankId) || StringUtils.isBlank(memberId)) {
return new Result(false, &解绑参数不合法!&);
authPayTwoService.unbind(bankId, memberId);
} catch (AppException e) {
LOG.error(&[解绑银行卡--认证支付2.0(unbind)-mas][error:{}&,e);
return new Result(false, e.getMessage());
} catch (Exception e) {
LOG.error(&[解绑银行卡--认证支付2.0(unbind)][error:{}&,e);
return new Result(false, &解绑银行卡失败,请重试&);
return new Result(true, &解绑银行卡成功!&);
}从上面的代码可以很轻松的定位方法、传入的参数及异常是调用接口抛出的异常还是系统级的异常。2.良好的日志输出格式最近测试同事采用两百并发对项目进行测试。格式优化前:经过测试查看每秒的并发量平均只有110多如下图:通过查看jvm 虚拟机发现很多日志线程出现BLOCKED,如下:&http-saoma%2F192.168.6.162-& daemon prio=10 tid=0x00002aaab88e4800 nid=0x2c8e runnable [0x4000]
java.lang.Thread.State: BLOCKED
at java.lang.Throwable.getStackTraceElement(Native Method)
at java.lang.Throwable.getOurStackTrace(Throwable.java:591)
- locked &0x90d0& (a java.lang.Throwable)
at java.lang.Throwable.getStackTrace(Throwable.java:582)
at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.log4j.spi.LocationInfo.&init&(LocationInfo.java:139)
at org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:253)
at org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:500)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:506)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310)
at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:369)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
- locked &0xfb1e00& (a org.apache.log4j.DailyRollingFileAppender)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
- locked &0x20a0& (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.slf4j.impl.Log4jLoggerAdapter.error(Log4jLoggerAdapter.java:497)我们定位org.apache.log4j.spi.LocationInfo类的代码如下: S
// Protect against multiple access to sw.
synchronized(sw) {
t.printStackTrace(pw);
s = sw.toString();
sw.getBuffer().setLength(0);
//System.out.println(&s is [&+s+&].&);
int ibegin,
// Given the current structure of the package, the line
// containing &org.apache.log4j.Category.& should be printed just
// before the caller.
// This method of searching may not be fastest but it's safer
// than counting the stack depth which is not guaranteed to be
// constant across JVM implementations.
ibegin = s.lastIndexOf(fqnOfCallingClass);从上面可以看出在该方法中用了synchronized锁,然后又通过打印堆栈来获取行号。那么肯定会影响到性能的,我们通过看此时log4j.properties日志文件配置的输出格式为:&%d %-5p %c:%L [%t] - %m%n很明显就是%l输出行号的问题,那么我们把%l去掉结果会不会好很多呢?把log4j.properties文件中输出格式改为:&%d %-5p %c [%t] - %m%n输出格式优化后:&再看每秒的并发量如下图:从图中我们可以看出并发量提高了40多,同时jvm线程日志中java.lang.Thread.State: BLOCKED也没有了。看来程序的性能和日志的输出格式也有很大的关系,希望看到此文的朋友们多多优化自己的日志和输出格式。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:114951次
积分:2447
积分:2447
排名:第11378名
原创:66篇
转载:22篇
评论:176条
文章:10篇
阅读:26024
文章:17篇
阅读:22329
文章:13篇
阅读:29121
文章:15篇
阅读:18161小高细则_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢2015年小学教师申报小高职称什么时候?_百度知道

我要回帖

更多关于 吊灯会不会掉下来 的文章

 

随机推荐