诊断由于 ulimit 设置 core file 为 unlimited 而引起的应用事故

一般情况下, 我们会设置 core file size 的 limit 为0, 通常出于性能(产生 core dump 消耗 CPU), 磁盘空间(core 文件通常特别大), 敏感数据( core dump 包含应用进程运行时很多数据)的原因, 把 core file size 设置为0, 也就是不允许产生 core dump. 有时候为了诊断某些特定的问题, 专门打开这个设置. 对于 Java 应用程序, 如果不涉及 native 代码, 通常 heap dump 就足够了, 所以不需要产生 core dump.

- 阅读剩余部分 -

linux 常见命令

文本处理类

  1. less
  2. more
  3. cat
  4. head
  5. tail
  6. awk
  7. cut
  8. grep, egrep, fgrep #print lines that match patterns, egrep & fgrep deprecated
    -- grep -v abc /var/log #打印不匹配的行
    -- grep -c abc -r /var/log #显示每个文件有多少匹配的数量
    -- grep -n abc /var/log #前面打印行号
    -- grep -n -C 3 abc /var/log #context 信息前后各3行, 或者 -B (Before), -A (After)
    -- grep -r abc /var/log #recursive
  9. sort
  10. uniq
  11. wc

- 阅读剩余部分 -

Linux 常见的系统日志文件

Linux 系统日志的配置文件在 /etc/rsyslog.conf.
默认常见的配置文件为:

authpriv.* /var/log/secure
auth user.* /var/log/messages
kern.* /var/log/kern.log
daemon.* /var/log/daemon.log
syslog.* /var/log/syslog
lpr,news,uucp.* /var/log/unused.log

对于应用程序来说, 可以通过以下方式找到日志文件

  1. 查看配置文件里面的配置项;
  2. 一般的日志文件在应用运行时都是在使用的, 通过 lsof 来查看
  3. google 以下

对于应用程序, 如何查找配置文件?

  1. 一般在 linux 的 /etc 目录, 人肉找, grep 找;
  2. 通过软件安装包管理软件, 如 rpm -c -q httpd
  3. 查看应用的日志文件, 在运行开头基本都回去读配置文件, 可能记到 log 里面;
  4. google 或 查看源代码

查询 Linux 文件创建时间

通常我们使用 ls -l 命令看到的时间是文件的最后修改时间, 那么如何查看文件的创建时间呢?

在 POSIX 文件系统, 文件有如下4个属性:

  1. ctime: (change)文件属性变化时间: 包括文件内容变化, 文件属性变化, 文件名变化,文件位置变化等.
  2. atime: (access)文件最后被访问时间.
  3. mtime: (modify)文件内容最后修改时间.
  4. crtime: (create)文件创建时间.

通过 stat <文件名> 可以查看前面3个时间:

eric@host:~$ stat test.txt
  File: 'test.txt'
  Size: 5           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1063236     Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (110061216/ xiatian)   Gid: (110061216/ xiatian)
Access: 2020-02-05 01:45:37.045123935 -0700
Modify: 2020-02-05 01:43:27.147481567 -0700
Change: 2020-02-05 01:46:55.609375115 -0700
 Birth: -

可是文件的创建时间为空, 如果需要查看文件创建时间, 可以通过下面的方式:

  1. 通过 ls -i <文件名> 或者 stat <文件名> 获取文件的 inode ID, 比如上面的 1063236

  2. 查看文件所在的文件系统

    eric@host:~$ df -h
    Filesystem Size Used Avail Use% Mounted on
    udev 7.9G 0 7.9G 0% /dev
    tmpfs 1.6G 169M 1.5G 11% /run
    /dev/vda1 75G 15G 58G 20% /
    tmpfs 7.9G 52K 7.9G 1% /dev/shm

  3. 通过 debugfs 查看 (下面的 crtime 就是创建时间)

    sudo debugfs -R 'stat <1063236>' /dev/vda1
    Inode: 1063236 Type: regular Mode: 0777 Flags: 0x80000
    Generation: 1248641795 Version: 0x00000000:00000001
    User: 110061216 Group: 110061216 Size: 5
    File ACL: 0 Directory ACL: 0
    Links: 1 Blockcount: 8
    Fragment: Address: 0 Number: 0 Size: 0
    ctime: 0x5e3a80ff:91494e2c -- Wed Feb 5 01:46:55 2020
    atime: 0x5e3a80b1:0ac2257c -- Wed Feb 5 01:45:37 2020
    mtime: 0x5e3a802f:23298f7c -- Wed Feb 5 01:43:27 2020
    crtime: 0x5e3a7f96:bf9070f4 -- Wed Feb 5 01:40:54 2020
    Size of extra inode fields: 32
    EXTENTS:
    (0):715060
    (END)

参考:
https://www.tecmint.com/debugfs-command-show-file-creation-time-in-linux/
http://wisercoder.com/knowing-difference-mtime-ctime-atime/