精华内容
下载资源
问答
  • 我是mac os系统,在终端运行一个要调用谷歌地图apipython程序,终端跳出了一些报错 我把报错给客服,客服说要我上传proxychainlog,然而我不知道在哪里能找到
  • 局域网内需要手机或者电脑下载一些固定文件,例如给每次都需要给测试发安装包,发文档,再比如手机需要下载安装包,ftp不方便,需要下载es文件浏览器或者其他软件访问,麻烦,所以用nginx做代理。二.安装nginx...

    46bcca5086bb4fd621d6eb50f484453c.png

    一.介绍

    ftp固然简单,nas更加强大,但是本着好用为主,局域网内需要手机或者电脑下载一些固定的文件,例如给每次都需要给测试发安装包,发文档,再比如手机需要下载安装包,ftp不方便,需要下载es文件浏览器或者其他软件访问,麻烦,所以用nginx做个代理。

    二.安装nginx

    可以去nginx官网下载压缩包,开箱即用,我ubuntu系统,也懒得下载,

    直接sudo apt-get install nginx

    齐活

    nginx -v 看看安装成功没有

    启动的话:可以 service nginx start

    /usr/sbin/nginx:主程序

    /etc/nginx:存放配置文件

    /usr/share/nginx:存放静态文件

    /var/log/nginx:存放日志

    卸载的话:sudo apt-get --purge autoremove nginx

    三.配置

    cc2ba63a97b1039770ed356ffff29375.png
            # include /etc/nginx/conf.d/*.conf;
            # include /etc/nginx/sites-enabled/*;
    
    
            ## index page setting
            server{
                    listen     80;
                    server_name localhost;
                    charset utf-8;
    
                    add_header Access-Control_Allow-Origin *;
                    add_header Access-Control-Allow-Headers X-Requested-With;
                    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    
                    location /{
                            root /usr/share/nginx/html; #主页地址修改
                            index index.html index.htm;
                    }
    
                    location /vs{
                            alias /home/zhc/Desktop/versions;  #映射的文件目录
                            autoindex on;
                            autoindex_exact_size on;
                            autoindex_localtime on;
                    }
    
            }
    

    75267b466e289b0612b646078db4cc1f.png

    # include /etc/nginx/conf.d/*.conf;

    # include /etc/nginx/sites-enabled/*;

    需求简单,直接把这两行注释掉

    展开全文
  • 某天上午收到最近发布的一个服务频繁FGC告警,这个服务只是给公司内部相关人员使用,并非给互联网用户提供服务的系统。而且功能也比较简单,就是查看一些统计信息、报表数据、数据导出Excel等,访问量非常低...

    点击上方“占小狼的博客”,选择“设为星标

    最近热文

     
    • JDK13的 5个新特性,抢先看,开车都追不上了!

    • 面试官问,使用Dubbo有没有遇到一些坑?我笑了。

    • 蚂蚁面试:字符串在JVM中如何存放?

    某天上午收到最近发布的一个服务频繁FGC的告警,这个服务只是给公司内部相关人员使用的,并非给互联网用户提供服务的系统。而且功能也比较简单,就是查看一些统计信息、报表数据、数据导出Excel等,访问量非常低。

    另外,由于这个服务并不是OLTP,所以就是简单的使用默认的ParallGC垃圾回收器,JVM参数也只是做了简单的配置:

    -Xmx512m -Xms512m -Xmn256m XX:+PrintGCDetails  -XX:+PrintGCDateStamps 

    关键线索

    废话不多说,既然有FGC,那就首先查看GC日志。毕竟FGC的原因还是比较多的,GC日志也是最直观的展示FGC原因的证据之一。

    这里要补充一句,我们在排查问题时,切记不要靠自己的主观意识猜测,而应该做到每一步的推断都有理有据,这样才能越来越接近真相,找出真正的凶手。

    GC日志中寻找FGC的命令以及结果如下所示(只贴出部分):

    afeideMacBook-Pro:jvm afei$ grep "full gc" -i gc.log

    2019-06-15T09:35:04.168-0800: [Full GC (System.gc()) [PSYoungGen: 6963K->0K(229376K)] [ParOldGen: 8K->6793K(262144K)] 6971K->6793K(491520K), [Metaspace: 5160K->5160K(1056768K)], 0.0085889 secs] [Times: user=0.03 sys=0.01, real=0.01 secs]

    2019-06-15T09:40:08.520-0800: [Full GC (System.gc()) [PSYoungGen: 5184K->0K(229376K)] [ParOldGen: 6793K->6090K(262144K)] 11977K->6090K(491520K), [Metaspace: 5168K->5168K(1056768K)], 0.0085573 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]

    ... ...

    根据这段GC日志就能非常肯定:是因为某些地方调用System.gc()触发的FGC

    因为这个服务访问亮比较小,并发量并不高。所以,笔者想看看触发FGC的时候,服务被调用了什么接口(如果是并发很高的OLTP,这种方法可能就不是很适用,毕竟每秒TPS成百上千,甚至更大,根本无法确定是哪个接口引起的)。

    以上面这段FGC日志,根据其触发的时间点,然后去系统业务日志中查找。很顺利我们就找到了这个时候是调用了一个导出报表数据到Excel并下载的接口。一开始我还有点怀疑会不会是导出数据量很大引起FGC,但是后面走读业务代码,发现导出数据限制最大不超过1000,所以,这个猜想也就被否定了。

    重现问题

    既然是导出Excel引起的,那么笔者就打算模拟这段代码,试图以最小量的代码看是否能重现这个问题。毕竟:范围越小,距离真相也就越近

    所以,笔者根据这个接口的业务代码,等价的写出了下面这段代码:

    public class JxlTest {

    public static void main(String[] args) throws Exception {

    for (int i = 0; i < 10; i++) {

    excelGen();

    }

    }

    private static void excelGen() throws Exception {

    WritableWorkbook book = null;

    WritableSheet sheet;

    try {

    book = Workbook.createWorkbook(new File("/Users/litian/afei.xls"));

    sheet = book.createSheet("PageNo.1", 0);

    Label label = new Label(0, 0, "公众号:【阿飞的博客】");

    sheet.addCell(label);

    book.write();

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    book.close();

    }

    }

    }

    配套的JVM参数如下,接下来运行这段代码即可。过程是如此顺利,10次Excel操作,10次FGC:

    -XX:+PrintGCDateStamps -XX:+PrintGCDetails

    -Xmx512m -Xms512m -Xmn256m

    -verbose:gc

    之所以用这段JVM参数,是为了希望通过-verbose:gc将GC日志直接输出到idea的控制台,而不是将GC日志输出到GC日志文件中,这样更方便定位问题。而且这段JVM参数相比生产环境的JVM参数,堆的大小和比例都是一样的,垃圾回收器也都是默认的。

    既然重现问题了,那就相当于问题解决了一半。窃喜,哈哈哈~~~

    另辟蹊径

    事实上定位这种问题最常见的方法还是借助btrace跟踪是哪里调用了System.gc(),毕竟,如果不能像笔者这种场景用一段很小的代码重现问题,笔者接下来介绍的方法可行性就不是很高。但是既然重现了,那么笔者今天就介绍另外一个门槛更低的办法:借助IDEA强大的搜索功能。毕竟定位问题不是为了炫技,只要能找出问题的办法,都是好办法。

    需要说明的,这段代码笔者是在一个新建的Maven工程中运行的,这段代码只依赖了一个jxl。之所以这么做,是为了笔者接下来介绍的方法能更精确的定位问题所在:

    net.sourceforge.jexcelapi

    jxl

    2.6.12

    接下来就是笔者介绍的方法:如何通过牛逼的IDEA找出是哪里调用了System.gc()。在搜索触发FGC的元凶之前,需要先下载jxl的源码--这段重现问题源码唯一的Maven依赖。这个下载必不可少,否则IDEA是无法搜到的:

    6e18a35d3b9ec9091aca5577ce9e32ad.png

    jxl源码下载完成后,就是打开IDEA强大的搜索了,由于有些同学是Window,有些同学是Mac,快捷键可能不同。所以笔者不介绍打开这个搜索功能的快捷键,而是介绍打开这个搜索功能的路径:

    # 这里是Find in Path,而不是FindEdit->Find->Find in Path # 范围选择Scope->Custom->Project and Libraries

    需要再次强调,一定要先通过idea下载jxl的源码,否则 FindinPath是搜不到项目依赖的jxl中的内容。如下图所示,只能搜到jdk源码中哪些地方调用了System.gc():

    53e9025860e6d5044e29df6926a741ce.png

    如果jxl源码下载后, FindinPath中选择范围 ProjectandLibraries后搜索 System.gc()的结果应该如下所示,红色框中就是依赖的开源组件jxl调用System.gc的地方:

    f8e10db6467e2de0126556b6108d5cf4.png

    现在范围就很小很小了,经过代码排查,我们很快就发现是在调用WritableWorkbook的close()方法时调用了System.gc(),从而触发了FGC。

    be58d3249935c13634051de4ef37ed20.png

    很多同学可能会想到通过JVM参数-XX:+DisableExplicitGC来屏蔽掉System.gc()的调用,这不是解决问题,而是掩盖问题。而且事实上,这里还有更好的办法,请继续往下看。

    解决方案

    我们排查jxl中所有调用System.gc()的地方,发现都是下面这种姿势。Bingo,那么我们只需要将workbookSettings中gcDisabled这个字段的值设置为true就不会调用System.gc了:

    if (!workbookSettings.getGCDisabled()) {

    System.gc();

    }

    gcDisabled设置为true非常简单,只需要稍微改造一下Workbook.createWorkbook()即可:

    WorkbookSettings settings = new WorkbookSettings();

    settings.setGCDisabled(true);

    book = Workbook.createWorkbook(new File("/Users/litian/afei.xls"), settings);

    代码改造后再次执行,再也不会有调用System.gc触发FGC了。美滋滋呀~~

    需要说明的是,最后还需要对这段代码进行压测,不断循环调用,看看是否GC异常,或者有堆外内存泄漏的情况(堆外内存只升不降)。

    幸运的是,没有任何问题。开心!

    最后,分享一份面试宝典Java核心知识点整理.pdf,覆盖了JVM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构等等。

    获取方式:点“好看”,关注公众号并回复 666 领取,更多内容陆续奉上。

    明天见(。・ω・。)ノ♡

    展开全文
  • 如果要输出到文件中一般都是自己开发一个类来完成。这样不好地方在于代码量太大,一方面维护起来不方便如果想屏蔽输出终端就要修改代码,或者就要忍受正式上线时存在大量调试代码。满屏幕字,不知道哪里才是...

    在编写程序的过程中,发现输出是一件很头大的事情,如果要输出到屏幕上用System.out.println("");

    如果要输出到文件中一般都是自己开发一个类来完成。这样的不好的地方在于代码量太大,一方面维护起来不方便如果想屏蔽输出终端就要修改代码,或者就要忍受正式上线时存在大量的调试代码。满屏幕的字,不知道哪里才是自己想要的,真是很头大的问题。

    然而log4j解决了这一起的问题。我们来看一下配置文件吧,log4j主要也就是一个配置文件,在写程序的时候一般只要先申明此类用什么logger,然后就在需要的时候写日志吧。通过修改配置文件,就可以决定log信息输出到何处(console,文件,...),是否输出。这样,在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(...)等)。使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。

    log4j的使用本身很简单。但合理地规划一个系统的统一log机制需要周全的考虑。并且可以输出到多个文件中,主要你配置好了。然后就可以控制日志的输出地方。

    配置文件详细解释

    先看一个配置文件的例子:

    其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

    appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

    log4j.rootLogger=DEBUG   

    #将DAO层log记录到DAOLog,allLog中

    log4j.logger.DAO=DEBUG,A2,A4  

    #将逻辑层log记录到BusinessLog,allLog中

    log4j.logger.Businesslog=DEBUG,A3,A4  

    #A1--打印到屏幕上       

    log4j.appender.A1=org.apache.log4j.ConsoleAppender

    log4j.appender.A1.layout=org.apache.log4j.PatternLayout

    log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n

    #A2--打印到文件DAOLog中--专门为DAO层服务

    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.A2.file=DAOLog

    log4j.appender.A2.DatePattern='.'yyyy-MM-dd

    log4j.appender.A2.layout=org.apache.log4j.PatternLayout

    log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    #A3--打印到文件BusinessLog中--专门记录逻辑处理层服务log信息

    log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.A3.file=BusinessLog

    log4j.appender.A3.DatePattern='.'yyyy-MM-dd

    log4j.appender.A3.layout=org.apache.log4j.PatternLayout

    log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    #A4--打印到文件alllog中--记录所有log信息

    log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.A4.file=alllog

    log4j.appender.A4.DatePattern='.'yyyy-MM-dd

    log4j.appender.A4.layout=org.apache.log4j.PatternLayout

    log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    配置其实比较简单,而且如果以后想变化了,就可以修改此配置了,不用修改代码,方便啊。节约了不少打字的时间,和重复的System.out的时间。

    在log4j中关于格式说的很详细的。

    程序中使用

    得到记录器

    使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

    public static Logger getLogger( String name),

    通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

    static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;

    读取配置文件

    当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

    BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。

    PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。

    DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

    插入记录信息(格式化日志信息)

    当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

    Logger.debug ( Object message ) ; Logger.info ( Object message ) ; Logger.warn ( Object message ) ; Logger.error ( Object message ) ;

    展开全文
  • erlang错误日志

    千次阅读 2013-08-13 23:03:04
    OTP系统已经内置了一个可定制错误日志模块。我们可以从三种不同视角来错误日志。程序员视角关注代码中要记录一个错误日志的函数调用?配置视角关注错误日志如何存储以及保存在哪里?报告视角则关心错误...

    错误日志

    OTP系统已经内置了一个可定制的错误日志模块。我们可以从三种不同的视角来看错误日志。程序员的视角关注代码中要记录一个错误日志的函数调用?配置的视角关注错误日志如何存储以及保存在哪里?报告的视角则关心错误发生之后,如何进行分析。我们将逐条讲述这些内容。

    记录一个错误日志

    在程序员的视角,错误日志的API很简单,下面是这些API的一部分:

    @spec error_logger:error_msg(String) -> ok

    向错误日志发送一个错误消息

    1> error_logger:error_msg("An error has occurred\n").

    =ERROR REPORT==== 28-Mar-2007::10:46:28 === An error has occurred

    ok

    @spec error_logger:error_msg(Format, Data) -> ok

    向错误日志发送一个错误消息。它的参数与io:format(Format, Data)函数的参数一样。

    2> error_logger:error_msg("~s, an error has occurred\n", ["Joe"]).

    =ERROR REPORT==== 28-Mar-2007::10:47:09 === Joe, an error has occurred

    ok

    @spec error_logger:error_report(Report) -> ok

    向错误日志发送一个标准错误报告。

    @type Report = [{Tag, Data} | term()] | string() | term()]

    @type Tag = term()

    @type Data = term()

    3> error_logger:error_report([{tag1,data1},a_term,{tag2,data}]).

    =ERROR REPORT==== 28-Mar-2007::10:51:51 ===

    tag1: data1

    a_term tag2: data

    需要说明的是,这只是可用错误日志API中的一小部分。详细讨论这些API没啥意思。下面的例子中,我们也只会用到error_msg。完整的细节可以参考手册中error_logger的部分。

    配置错误日志

    可以对错误日志进行多种配置。在Erlangshell中我们可以看到所有的错误信息(如果我们什么都不配,这就是默认的配置)。我们可以把报告给shell中的错误写到一个格式化的文本文件中。此外,我们还能创建一个循环日志。你可以把循环日志想像成一个由错误日志产生的巨大环形缓存区域。新的消息进来时,会把它加到日志的尾部,如果日志被装满了,最早的条目就会被清除。

    循环日志是一个极有用的特性。你可以决定总共有多少个日志文件,以及单个日志文件的大小。系统负责帮你删除旧文件以及创建新文件,以维持整个巨大的环形数据区域。你可以调整日志大小,以用来记录最近几天的操作,这在大多数情况下都是绰绰有余的了。

    标准错误日志

    启动Erlang的时候,我们可以给系统设置一些启动参数:

    $ erl -boot start_clean

    这会创建一个适合程序开发的环境。只会提供错误日志的简单形式(不带boot参数的erl启动命令其效果等同于erl –boot start_clean)。

    $erl –boot start_sasl

    这会创建一个适合产品化系统的环境。SASLSystem Architecture Support Libraries的缩写,它负责错误日志,过载保护等等。

    谁也没法记住日志记录器的所有配置(也没这个必要),所以,最好还是把错误日志文件的配置信息记到一个配置文件中。 下面的小节,我们会考察默认配置下系统中的错误日志是如何工作的。然后会了解四种典型的配置方式下,错误日志不同的工作方式。

    不进行配置的SASL

    这是在SASL下启动,不进行配置的情况:

    $ erl -boot start_sasl

    Erlang (BEAM) emulator version 5.5.3 [async-threads:0] ...

    =PROGRESS REPORT==== 27-Mar-2007::11:49:12 ===

    supervisor: {local,sasl_safe_sup}

    started: [{pid,<0.32.0>},

    {name,alarm_handler},

    {mfa,{alarm_handler,start_link,[]}},

    {restart_type,permanent},

    {shutdown,2000},

    {child_type,worker}]

    ... many lines removed ...

    Eshell V5.5.3 (abort with ^G)

    现在我们调用error_logger的方法来报告错误:

    1> error_logger:error_msg("This is an error\n").

    =ERROR REPORT==== 27-Mar-2007::11:53:08 === This is an error

    ok

    注意,错误是在Erlangshell中报告出来的。错误报告取决于错误日志记录器的配置。

    控制记录何种日志

    错误日志记录器会产生几种类型的报告:

    Supervisor报告

    Supervisor启动或者停止被监管的进程时,会产生这个报告(我们在18.5节监管树“第345页”中会讨论它)。

    Progress报告

    每次OTP监管进程启动或者停止的时候会产生这个报告。

    Crash报告

    当被监管的进程退出时,如果它的退出原因不是normal或者shutdown,就会产生这个报告。

    这三种报告是自动产生的,程序员无需关心。除此之外,当程序显式调用error_handler的方法时,也会产生三种日志报告。通过这三种报告,程序可以记录错误,警报以及提示信息。在这里,这三个术语并没有什么特别的语意,仅仅是程序员可以使用的三种标签,用来标明错误日志条目的自然属性(也就是说,想怎么用,随你)。

    在日后对错误日志进行分析的时候,我们可以用这三种标签协助我们来检查问题,过滤日志条目。在对日志进行配置的时候,我们也可以指定,比如,只保存错误,其他的信息不予保存。下面我们就来写一个这样的配置文件。

    elog1.config

    %% no tty

    [{sasl, [

    {sasl_error_logger, false}

    ]}].

    如果用这个配置文件启动系统,只有错误报告会被记录,progress报告之类的全部被忽略掉。而且,所有的错误都报告在shell当中。

    $ erl -boot start_sasl -config elog1

    1> error_logger:error_msg("This is an error\n").

    =ERROR REPORT==== 27-Mar-2007::11:53:08 === This is an error

    Ok

    文本文件和shell

    下一个配置文件,错误信息会同时出现在shell和一个文本文件之中:

    elog2.config

    %% single text file - minimal tty

    [{sasl, [

    %% All reports go to this file

    {sasl_error_logger, {file, "/home/joe/error_logs/THELOG" }}

    ]}].

    我们启动Erlang,生成一些错误信息,然后看看日志文件,以检查这个配置文件的效果。

    $ erl -boot start_sasl -config elog2

    1> error_logger:error_msg("This is an error\n").

    =ERROR REPORT==== 27-Mar-2007::11:53:08 === This is an error ok

    我们可以查看/home/joe/error_logs/THELOG文件的内容,应该是这样的:

    =PROGRESS REPORT==== 28-Mar-2007::11:30:55 ===

    supervisor: {local,sasl_safe_sup}

    started: [{pid,<0.34.0>},

    {name,alarm_handler},

    {mfa,{alarm_handler,start_link,[]}},

    {restart_type,permanent},

    {shutdown,2000},

    {child_type,worker}]

    ...

    循环日志和Shell

    这个配置下,日志会在Shell以及一个循环日志中同时输出。这是一个很有用的配置。

    elog3.config

    %% rotating log and minimal tty

    [{sasl, [

    {sasl_error_logger, false},

    %% define the parameters of the rotating log

    %% the log file directory

    {error_logger_mf_dir,"/home/joe/error_logs" },

    %% # bytes per logfile

    {error_logger_mf_maxbytes,10485760}, % 10 MB

    %% maximum number of logfiles

    {error_logger_mf_maxfiles, 10}

    ]}].

    $erl -boot start_sasl -config elog3

    1> error_logger:error_msg("This is an error\n").

    =ERROR REPORT==== 28-Mar-2007::11:36:19 === This is an error

    False

    当用这个配置运行系统的时候,所有的错误也会输出到这个循环日志中。本章后面的章节,我们会看到从日志中提取错误信息的方法。

    产品化环境

    在产品化环境中,我们只关注错误,而对progressinformation日志不感兴趣。所有我们在配置中让日志记录器仅仅记录错误。以免这些信息淹没在大量的progressinformation日志中。

    elog4.config

    %% rotating log and errors

    [{sasl, [

    %% minimise shell error logging

    {sasl_error_logger, false},

    %% only report errors

    {errlog_type, error},

    %% define the parameters of the rotating log

    %% the log file directory

    {error_logger_mf_dir,"/home/joe/error_logs" },

    %% # bytes per logfile

    {error_logger_mf_maxbytes,10485760}, % 10 MB

    %% maximum number of

    {error_logger_mf_maxfiles, 10}

    ]}].

    运行的时候,这个配置与前一个配置的效果看起来很相似,唯一的区别在于,只有错误会被记录到日志中。

    分析错误日志

    读取错误日志是rb模块的职责。它的接口相当简单。

    1> rb:help().

    Report Browser Tool - usage

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

    rb:start()  - start the rb_server with default options rb:start(Options) - where Options is a list of:

    {start_log, FileName}

    - default: standard_io

    {max, MaxNoOfReports}

    - MaxNoOfReports should be an integer or 'all'

    - default: all

    ...

    ... 此处省略很多行 ...

    ...

    我们启动report browser的时候可以指定它需要读取多少行(这个例子中,是最后的20行)

    2> rb:start([{max,20}]).

    rb: reading report...done.

    3> rb:list().

    No   Type       Process Date  Time

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

    11    progress <0.29.0> 2007-03-28 11:34:31

    10    progress <0.29.0> 2007-03-28 11:34:31

    9     progress <0.29.0> 2007-03-28 11:34:31

    8     progress <0.29.0> 2007-03-28 11:34:31

    7     progress <0.22.0> 2007-03-28 11:34:31

    6     progress <0.29.0> 2007-03-28 11:35:53

    5     progress <0.29.0> 2007-03-28 11:35:53

    4     progress <0.29.0> 2007-03-28 11:35:53

    3     progress <0.29.0> 2007-03-28 11:35:53

    2     progress <0.22.0> 2007-03-28 11:35:53

    1     error       <0.23.0> 2007-03-28 11:36:19

    ok

    > rb:show(1).

    ERROR REPORT <0.40.0>   2007-03-28 11:36:19

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

    This is an error ok

    要隔离一个特定的错误,我们可以使用rb:grep(RegExp)命令。它会找出所有匹配这个正则表达式的记录。我这里就不深入分析错误日志的细节问题了,学习它的最好方法是花一点时间,自己来和rb进行一些交互,看看都能做点什么。注意,你根本不需要自己来删日志,循环机制会删除旧的日志。

    如果你想要保留所有的日志,那么你就需要每隔一段特定的时间过来抓取,并自己进行清理。


    转自 http://zoomq.qiniudn.com/ZQScrapBook/ZqFLOSS/data/20080509112000/index.html


    展开全文
  • 刚才正在写代码,一次保存之后,正要刷新下效果,电脑突然...电脑买来一个多月,进行操作有更换了8G内存条,更换32位WIN7到64位WIN7版,自带激活码激活。 剩下就是正常安装软件使用,今天是第一次出...
  • Log4j记录系统日志

    2011-03-07 15:17:15
    如果要输出到文件中一般都是自己开发一个类来完成。这样不好地方在于代码量太大,一方面维护起来不方便如果想屏蔽输出终端就要修改代码,或者就要忍受正式上线时存在大量调试代码。满屏幕字,不知道哪里才是...
  • 先交代一个背景 我的系统 ubuntu 16.04 ...首先我要去查日志文件在哪里, 所以我就 使用 mysqld --help --verbose | less 命令去配置文件放在哪里. (这些命令不懂什么意思请去搜索一下) 然后...
  • erlang 错误日志

    2013-12-12 23:22:59
    OTP系统已经内置了一个可定制错误日志模块。我们可以从三种不同视角来错误日志。程序员视角关注代码中要记录一个错误日志的函数调用?配置视角关注错误日志如何存储以及保存在哪里?报告视角则关心错误...
  • 先交代一个背景我的系统 ubuntu 16.04使用 root命令登录后, 然后使用 service mysql start 启动mysql, 启动失败.那么我就去看日志文件.首先我要去查日志文件在哪里, 所以我就使用 mysqld --help --verbose | less ...
  • TOMCAT中的一个问题

    2008-06-22 01:16:00
    这两天客户端部署BO报表系统遇到一个奇怪问题,tomcat启动面板打出来的日志信息端口号为8181,但我server.xml文件里面已经将端口号改为了8107,但为什么会是8181呢!真是一头雾水。用UEtomcat目录下所有文件...
  • 最近搭建基于Spring Cloud微服务框架,日志系统当然最佳选择就是ELK。看着MAC 那紧巴巴配置,又不想热情退去而留下一堆软件,果断选择Docker安装来...这篇文章主旨是搭建一个ELK(主要是elasticsearch + kiba...
  • 步骤1:确定用纸还是用数码 ...我建议你从每周一次的日志开始,适应之后再如何安排。如果你一个日志主题时存在困难,就利用这个机会回顾你过去一周的进度并预测、展望下周的事。不管你是从哪里找到
  • 最近项目中遇到一个很奇怪问题,因为修改配置(redis中缓存),nginx服务突然报upstream timed out (110: Connection timed out),然后去查为什么会出现这样问题,发现出问题服务是一个swoole...
  • 我拿出来这个语句mysql里面执行没问题,然后字段对着实体类一个瞅,然后后面干脆重新一个个复制过去。还是报这个错误。 然后和同事讨论了一会儿也没想出来哪里会还有问题 首先只有登录这个账户查询...
  • 事情经过是这样,一天下午,一位...赶快排查哪里出了问题,看日志发现执行数据相关操作全是error,正好有一个系统半个小时前发布过,于是紧急回滚,问题也同步排查,系统回滚完发现情况并没有好转,这时另一个同...
  • 关于Manifest合并错误时解决方法

    千次阅读 2018-04-19 14:40:28
    今天拿到开始做一个新项目,是在原来项目上删减版。在编译代码时候,系统报了一个&...我当时其实想错误日志的,然后没找到这个日志显示在哪里,然后搜了一波百度。百度上很多都是针对自己...
  • 首先第一个问题,我们经常谈监控,监控其实是一种表象,底层其实都是通过一些数据的分析来判定到底哪里有问题,或者说你告诉我原因哪,然后我去解决。同样的业务下,一般运维所产生的日志数据量比业务数据量要大,...
  • 当我在主数据库新建一个user表时从数据库会复制出一个user表格,但是当我在主数据库user表添加数据并保存后,从数据库并不会同步对应user表中数据,下面是我主数据库和从数据库配置文件,各位大佬帮我看看问题...
  • 这两天接手了下师兄的项目,要给系统加日志管理模块,其中需要记录登录功能的日志,那么首先要知道系统的登录是在哪里实现验证的。 该系统把所有登录验证还有权限控制的工作都交给了shiro。 这篇文章就先简单...
  • hello 你好我是辰兮 我们又见面了. 最近真比较蠢写了一个比较严重bug…出现了这个异常 ...登录后可以直接发现93行和102行代码一直在循环调用,就可以直接定位到问题在哪里了,然后查到发现是自己递归调用了.
  • 不幸是,虽然关系型数据库历经了约30年发展,有成熟理论和大量实践基础,但是,大多数设计、开发人员设计数据库结构时仍然是“跟着感觉走”,根据业务需要和编程方便,把字段这张表放几那张表放几...
  • 系统稳定运行还好,就怕出问题。但事情往往是越拍啥越来啥,所以我们要做好预案,并且手头得有几件趁手兵器。 列列常见问题和针对处理步骤。...某个接口调用总是说慢,慢在哪里,我加点debug日志看看吧;...
  • 最近线上出现一个问题,外部请求过来后一直没有响应给调用方,看日志没有报错,可以复现。 想到就可能是五个原因: 日志文件过大导致磁盘空间满了,导致正常业务日志无法写入,但是重启后发现日志能正常写入,...
  • Linux必背命令

    2020-05-28 22:16:05
    调试接口时候,领导要我去服务器上一下日志,我当时脸懵逼。服务器从哪里进啊,怎么进去了是黑窗口啊?怎么啊?后来硬着头皮请教同事,其实是部署linux系统上,用linux命令就可以。但是由于长时间...
  • 最近重装了几台终端服务器,也不知道那个系统哪里搞来,反正不是我原来装那个,结果部署以后很多用户反应,使用Excel时,用着用着就弹出需要重启恢复Excel窗口,然后我系统日志里面,发现很多红叉...
  • 这不,老大发话,要我组内做一个 Elasticsearch 技术分享。这不话题一转,开始起来 ES 了。虽然很久之前用过 ELK 做过日志监控系统,但是毕竟时隔已久,还是得从头起。当然手头活也不能停,话不多说,开始...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

一个系统的日志在哪里看