精华内容
下载资源
问答
  • 生产环境中的catch块下包含printStackTrace是否可以接受? (因为catch块下的日志无助于知道错误的确切原因)那么请告诉我,如果在catch块下有printStackTrace是否可以使用?例如,我故意放置一个无效的端口号,...

    我将在生产服务器下部署我们的Web应用程序.

    在生产环境中的catch块下包含printStackTrace是否可以接受? (因为catch块下的日志无助于知道错误的确切原因)

    那么请告诉我,如果在catch块下有printStackTrace是否可以使用?

    例如,我故意放置一个无效的端口号,printStackTrace()给我这个信息.

    printStackTrace():

    java.lang.IllegalArgumentException: port out of range:80800

    at java.net.InetSocketAddress.(InetSocketAddress.java:118)

    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)

    at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)

    at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)

    at sun.net.www.http.HttpClient.(HttpClient.java:234)

    at sun.net.www.http.HttpClient.New(HttpClient.java:307)

    at sun.net.www.http.HttpClient.New(HttpClient.java:324)

    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)

    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)

    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)

    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014)

    at com.tata.util.XmlClient.execute(HttpXmlClient.java:83)

    日志样式:

    日志给出了这个(我使用Apache commons日志记录机制进行日志记录)

    Log.write("**EXCEPTION INSIDE execute " + e, Log.INFO);

    06/Jan/2012 16:25:55 - main:http-8080-2 <> <60990020>**EXCEPTION INSIDE execute java.lang.IllegalArgumentException: port out of range:80800

    那么请告诉我在catch块下是否可以使用printStackTrace?

    展开全文
  • 问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况。2...

    问题描述:

    生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。

    问题分析:

    1,程序属于CPU密集型,和开发沟通过,排除此类情况。

    2,程序代码有问题,出现死循环,可能性极大。

    问题解决:

    1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。

    2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。

    解决过程:

    1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。

    2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:

    [root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn

    显示结果如下:

    USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME

    root     10.5  19    - -         -      -  3626 00:12:48

    root     10.1  19    - -         -      -  3593 00:12:16

    找到了耗时最高的线程3626,占用CPU时间有12分钟了!

    将需要的线程ID转换为16进制格式:

    [root@localhost logs]# printf "%x\n" 3626

    e18

    最后打印线程的堆栈信息:

    [root@localhost logs]# jstack 2633 |grep e18 -A 30

    将输出的信息发给开发部进行确认,这样就能找出有问题的代码。

    通过最近几天的监控,CPU已经安静下来了。

    展开全文
  • Java生产环境下性能监控与调优详解视频教程 jstat查看JVM统计信息 jstack与线程的状态 MAT 分析内存溢出的方法 可视化工具分析GC日志 通过这套视频学习如何在生产环境下进行性能监控与调优。 视频在百度网盘中...
  • 日志 java_Java日志规范

    2021-02-12 11:56:25
    Overview一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java...

    Overview

    一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java程序里写好日志。

    一般来说日志分为两种:业务日志和异常日志,使用日志我们希望能达到以下目标:

    对程序运行情况的记录和监控;

    在必要时可详细了解程序内部的运行状态;

    对系统性能的影响尽量小;

    Java日志框架

    Java的日志框架太多了。。。

    Log4j 或 Log4j 2 - Apache的开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。这些可以通过一个配置文件(XML或Properties文件)来灵活地进行配置,而不需要修改程序代码。Log4j 2则是前任的一个升级,参考了Logback的许多特性;

    Logback - Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging;

    java.util.logging - JDK内置的日志接口和实现,功能比较简;

    Slf4j - SLF4J是为各种Logging API提供一个简单统一的接口),从而使用户能够在部署的时候配置自己希望的Logging API实现;

    Apache Commons Logging - Apache Commons Logging (JCL)希望解决的问题和Slf4j类似。

    选项太多了的后果就是选择困难症,我的看法是没有最好的,只有最合适的。在比较关注性能的地方,选择Logback或自己实现高性能Logging API可能更合适;在已经使用了Log4j的项目中,如果没有发现问题,继续使用可能是更合适的方式;我一般会在项目里选择使用Slf4j, 如果不想有依赖则使用java.util.logging或框架容器已经提供的日志接口。

    Java日志最佳实践

    定义日志变量

    日志变量往往不变,最好定义成final static,变量名用大写。

    日志分级

    Java的日志框架一般会提供以下日志级别,缺省打开info级别,也就是debug,trace级别的日志在生产环境不会输出,在开发和测试环境可以通过不同的日志配置文件打开debug级别。

    fatal - 严重的,造成服务中断的错误;

    error - 其他错误运行期错误;

    warn - 警告信息,如程序调用了一个即将作废的接口,接口的不当使用,运行状态不是期望的但仍可继续处理等;

    info - 有意义的事件信息,如程序启动,关闭事件,收到请求事件等;

    debug - 调试信息,可记录详细的业务处理到哪一步了,以及当前的变量状态;

    trace - 更详细的跟踪信息;

    在程序里要合理使用日志分级:

    be53413ad3e78934e7e99373e6b59b47.png

    基本的Logger编码规范

    1.在一个对象中通常只使用一个Logger对象,Logger应该是static final的,只有在少数需要在构造函数中传递logger的情况下才使用private final。

    2d4d10518a3919c09c545621210a4ee1.png

    2.输出Exceptions的全部Throwable信息,因为logger.error(msg)和logger.error(msg,e.getMessage())这样的日志输出方法会丢失掉最重要的StackTrace信息。

    fc8f83a368afd1fbc79cc6cedd7687f9.png

    3.不允许记录日志后又抛出异常,因为这样会多次记录日志,只允许记录一次日志。

    3bc98acdbe94783c2a35cf3aa18540b2.png

    4.不允许出现System print(包括System.out.println和System.error.println)语句。

    ed124da341f25b6e4596a14675cb4ba6.png

    5.不允许出现printStackTrace。

    7bd3723b43834eeb3279acc9ea62ee30.png

    6.日志性能的考虑,如果代码为核心代码,执行频率非常高,则输出日志建议增加判断,尤其是低级别的输出。

    debug日志太多后可能会影响性能,有一种改进方法是:

    792dd83c429d50d4f8c3a74113b93ca8.png

    但更好的方法是Slf4j提供的最佳实践:

    6e6433531ccde53eca6aa16267703896.png

    一方面可以减少参数构造的开销,另一方面也不用多写两行代码。

    7.有意义的日志

    通常情况下在程序日志里记录一些比较有意义的状态数据:程序启动,退出的时间点;程序运行消耗时间;耗时程序的执行进度;重要变量的状态变化。

    初次之外,在公共的日志里规避打印程序的调试或者提示信息。

    展开全文
  • 问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况。2...

    问题描述:

    生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。

    问题分析:

    1,程序属于CPU密集型,和开发沟通过,排除此类情况。

    2,程序代码有问题,出现死循环,可能性极大。

    问题解决:

    1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。

    2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。

    解决过程:

    1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。

    2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:

    [root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn

    显示结果如下:

    USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME

    root     10.5  19    - -         -      -  3626 00:12:48

    root     10.1  19    - -         -      -  3593 00:12:16

    找到了耗时最高的线程3626,占用CPU时间有12分钟了!

    将需要的线程ID转换为16进制格式:

    [root@localhost logs]# printf "%x\n" 3626

    e18

    最后打印线程的堆栈信息:

    [root@localhost logs]# jstack 2633 |grep e18 -A 30

    将输出的信息发给开发部进行确认,这样就能找出有问题的代码。

    通过最近几天的监控,CPU已经安静下来了。

    ============================================

    我们使用jdk自带的jstack来分析。当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙:

    1.top查找出哪个进程消耗的cpu高

    21125 co_ad2    18   0 1817m 776m 9712 S  3.3  4.9  12:03.24 java

    5284 co_ad     21   0 3028m 2.5g 9432 S  1.0 16.3   6629:44 java

    21994 mysql     15   0  449m  88m 5072 S  1.0  0.6  67582:38 mysqld

    8657 co_sparr  19   0 2678m 892m 9220 S  0.3  5.7 103:06.13 java

    这里我们分析21125这个java进程。

    2.top中shift+h查找出哪个线程消耗的cpu高

    先输入top -p 21125,然后再按shift+h。这里意思为只查看21125的进程,并且显示线程。

    21233 co_ad2    15   0 1807m 630m 9492 S  1.3  4.0   0:05.12 java

    20503 co_ad2_s  15   0 1360m 560m 9176 S  0.3  3.6   0:46.72 java

    21134 co_ad2    15   0 1807m 630m 9492 S  0.3  4.0   0:00.72 java

    22673 co_ad2    15   0 1807m 630m 9492 S  0.3  4.0   0:03.12 java

    这里我们分析21233这个线程,并且注意的是,这个线程是属于21125这个进程的。

    3.jstack查找这个线程的信息

    jstack [进程]|grep -A 10 [线程的16进制]

    即:

    jstack 21125|grep -A 10 52f1

    -A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。

    结果:

    "http-8081-11" daemon prio=10 tid=0x00002aab049a1800 nid=0x52f1 in Object.wait() [0x0000000042c75000]

    java.lang.Thread.State: WAITING (on object monitor)

    at java.lang.Object.wait(Native Method)

    at java.lang.Object.wait(Object.java:485)

    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416)

    说不定可以一下子定位到出问题的代码。

    生产环境下JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

    生产环境JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

    java应用高cpu占用

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环 排查故障如下: 1.根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障 2.通过ps ...

    Linux下计算进程的CPU占用和内存占用的编程方法&lbrack;转&rsqb;

    from:https://www.cnblogs.com/cxjchen/archive/2013/03/30/2990548.html Linux下没有直接可以调用系统函数知道CPU占用和内存占用. ...

    SQL 数据库高CPU占用语句排查

    前述 最近一个项目CPU占用非常高,在IIS内设置CPU限制后系统频繁掉线,通过任务管理器发现SQLSever数据库占用CPU达到40%--70%,对于数据库本人也就处在增删查改几个操作水平层面,这次 ...

    总结:利用asp&period;net core日志进行生产环境下的错误排查(asp&period;net core version 2&period;2,用IIS做服务器)

    概述 调试asp.net core程序时,在输出窗口中,在输出来源选择“调试”或“xxx-ASP.NET Core Web服务器”时,可以看到类似“info:Microsoft.AspNetCore. ...

    Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

    &lpar;转&rpar;Linux下java进程CPU占用率高-分析方法

    Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...

    Linux下java进程CPU占用率高分析方法(一)

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

    随机推荐

    &lbrack;Deprecated&excl;&rsqb; Android开发案例 - 微博正文

    Deprecated! 更好的实现方式: 使用 android.support.design.widget.CoordinatorLayout. 本文详细介绍如何实现如下图中的微博正文页面效果, 其中 ...

    使用升级助 升级了win10,黑屏,无桌面 解决方案

    使用U盘重装即可. 事实证明,win10升级助手实在不咋地 优待又2: (1)保留原win7系统,有后悔药: (2)原系统的软件可用: 缺点: (1)装得慢,一上午: (2)开机慢,三分半 (3)开机 ...

    Ajax的&OpenCurlyDoubleQuote;dataType”乱用的陷阱

    $.doAjax({ url : "areaAction_synchronizeArea.do", data : { 'vrvRangeUrl' : synAreaHTTP ,'v ...

    DAG模型——硬币问题

    硬币问题 有n种硬币,面值分别为V1,V2,...,Vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值.1<=n<=100, 0& ...

    The Blocks Problem(vector)

    题目链接:http://poj.org/problem?id=1208 The Blocks Problem Time Limit: 1000MS   Memory Limit: 10000K Tot ...

    rsync同步web数据

    rsync远程同步web服务器的数据 实验拓扑                                            服务器A(rsync服务器)--------------服务器B( ...

    VB6 实现命令行调用时附着到原控制台

    Public Declare Function AttachConsole Lib "kernel32.dll" (ByVal ProcessID As Integer) As B ...

    BZOJ 4316&colon; 小C的独立集 解题报告

    4316: 小C的独立集 Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点, ...

    使用Console命令调试JS

    一.console 的对象常用的方法 1.console.log(object[, object, ...])使用频率最高的一条语句:向控制台输出一条消息.支持 C 语言 printf 式的格式化输出 ...

    展开全文
  • 1.当出现线上问题时,需要查询生产环境日志排查定位问题原因,但生产环境的服务器是集群部署,每台机器上每天都会有日志产生,且每台机器上的日志不一样,通过依次登录每台机器去各个文件下查询日志,费时的重复性...
  • 生产环境抛异常,但却没有将完整的堆栈信息输出到日志,可以确定的是日志输出时用的是log.error(“message”, e),测试环境和本地环境都正常,起初以为是因为微服务分布式部署,logstash在同步日志的时候,按行提哦送...
  • 一个简单的ASP.NET Core 2.0 Web应用程序,作为应用程序服务部署在azure中 - 经过编辑,以确保ASPNETCORE_ENVIRONMENT开发和 生产环境 的配置相同 .具有以下Startup类的Configure方法:loggerFactory....
  • **线上环境**一般都通过搭建**服务器集群**构成。 假如集群中某台服务器宕机, 那么怎么**通过log日志**快速定位是**哪台服务器**呢?
  • Overview一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java...
  • 一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java程序里写...
  • 概述对于现代的 Java 应用程序来说,只要被部署到真实的生产环境,其日志的重要性就是不言而喻的,很难想象没有任何日志记录功能的应用程序被运行于生产环境中。日志 API 所能提供的功能是多种多样的,包括记录程序...
  • 前言一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java程序...
  • Java log日志

    2020-07-25 21:05:44
    其次,我们希望在开发和生产环境中记录的日志并不相同,明显开发环境的日志记录会更多方便调试,但放到生产环境下大量的日志很容易会撑爆服务器,因此在生产环境我们希望只记录重要信息。 使用ommons-logging的Log...
  • 通常,Java程序员在开发项目时都是依赖Eclipse/IDEA等集成开发工具的Debug 调试功能来跟踪解决Bug,但项目发布到了测试、生产环境怎么办?你有可能会说可以使用远程调试,但实际并不能允许让你这么做。所以,日志的...
  • 概述一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java程序...
  • Java不同的日志简介

    2020-07-11 17:43:32
    通常,Java程序员在开发项目时都是依赖Eclipse/IDEA等集成开发工具的Debug 调试功能来跟踪解决Bug,但项目发布到了测试、生产环境怎么办?你有可能会说可以使用远程调试,但实际并不能允许让你这么做。 所以,日志的...
  • 说明:这种方式应该算是最通用的,原理是通过判断标签实现。 <!-- if-then form --> <if condition="some conditional expression"> <then> ... </then>...--...
  • Overview一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java...
  • Overview一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java...
  • Java日志框架

    2019-11-05 19:23:59
    Java日志框架简介及其应用 Java日志简介 ​ 简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决...所以,日志的作用就是在测试、生产环境没有 Debug 调试工具时开发、测试人员定位问题...
  • 概述一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神。程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的。本文想讨论的是如何在Java程序...
  • 生产环境java虚拟机jvm监控优化 博客分类: jvm   生产环境由于研发人员不能随便修改,没有权限,所以只能另辟蹊径。 我这里的案例是以个人所在公司来将,研发环境、测试环境要修改某个参数,比较简单...
  • 我们 Java 程序员在开发项目时都是依赖 Eclipse/ Idea 等开发工具的 Debug 调试功能来跟踪解决 Bug,在开发环境可以这么做,但项目发布到了测试、生产环境呢?你有可能会说可以使用远程调试,但实际并不能允许让你...
  • 目录什么是日志常用日志框架日志...我们 Java 程序员在开发项目时都是依赖 Eclipse/ Idea 等开发工具的 Debug 调试功能来跟踪解决 Bug,在开发环境可以这么做,但项目发布到了测试、生产环境呢?你有可能会说可以使...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 773
精华内容 309
关键字:

java生产环境日志

java 订阅