GaGa's Blog

One GaGa, One World !

cronolog 是一个用 C 写的小工具,用于按时间自动切割日志文件。它主要用于 Web 服务器(如 Apache、Nginx)或其他进程,将日志按时间组织成多个文件,方便管理和归档。

  • 版本:1.6.2(你提供的版本)

  • 用途

    • 按天、小时或自定义时间切割日志
    • 文件名中包含时间戳
    • 适用于需要精细化日志管理的系统
  • 优势

    • 灵活的时间格式(%Y-%m-%d、%H 等)
    • 无需定时任务即可自动切割
    • 可输出到管道,结合 Web 服务器使用

使用场景

  • Apache、Nginx、Squid 这类服务端进程默认只能把日志写到一个文件,不会自动分割。

  • 借助 cronolog,可以实现类似:

    • 每天生成一个新的访问日志
    • 每小时切割一个错误日志
    • 文件名中自动包含时间戳
Read more »

容器检查失败是否会自动重启

HEALTHCHECK 是用于标记容器的状态为 healthy 或 unhealthy,不会自动触发容器重启

1
2
3
4
5
6
7
8
9
...
healthcheck:
test: curl -f http://localhost:8080/health || exit 1
interval: 30s
timeout: 5s
retries: 3
start_period: 10s

restart: on-failure

Mac(或类 Unix 系统)上批量把 GBK 编码的 .txt 文件转换成 UTF-8.


1.alias组合命令(当前使用)

# 对当前目录下*.txt文件批量格式化转换
alias winfmt='find *.txt -exec sh -c "iconv -f gbk -t utf-8 {} > {}.txt" \;'
Read more »

kubectl logs--previous 参数是一个很实用的选项,主要用于排查容器异常重启(CrashLoopBackOff、OOMKilled 等)时的日志

具体含义:

  • 默认情况 (kubectl logs pod -c container)
    获取的是容器 当前正在运行实例 的日志。
    如果容器已经崩溃并被 Kubernetes 重启,新实例启动后,旧日志就不会显示。

  • 加上 --previous 参数
    会让 kubectl logs 去获取 上一个已终止容器实例 的日志。
    这对于定位容器为什么崩溃非常关键。


Read more »

1. JVM 内存 != 堆内存

-Xmx 只控制 Java 堆(Heap) 的上限,而 JVM 进程还需要其他内存区域:

  • 堆 (Heap): 由 -Xms/-Xmx 控制
  • 非堆 (Non-Heap): 元空间 (Metaspace)、代码缓存 (CodeCache)、JIT 编译出来的机器码
  • 直接内存 (Direct Memory): ByteBuffer.allocateDirect(),或者 Netty、RPC 框架常用
  • 线程栈 (Thread Stack): 每个线程 -Xss,默认一般 1M,一个容器里如果有几千线程就很夸张了
  • GC 开销 / JIT 开销: GC 线程运行需要额外内存,JIT 编译时也会占内存
  • JNI / 本地库分配: 依赖 C/C++ 库时的 malloc 内存

👉 所以,JVM 进程的实际 RSS = Heap + Non-Heap + Direct + Thread + Native,远大于 -Xmx

Read more »

1. 基础理解

  • 管道符 |
    把前一个命令的输出结果传递给后一个命令作为输入(stdin)。

  • xargs
    把 stdin 中的内容转换成命令行参数,再执行指定命令。适合“把一堆输入拼接成参数列表”。

    1
    2
    echo "a b c" | xargs echo
    # 输出:a b c (作为 echo 的参数)
  • sed
    流编辑器,逐行读取 stdin,对文本进行替换、删除、插入等操作。适合“在文本流中直接修改”。

    1
    2
    echo "abc" | sed 's/a/A/'
    # 输出:Abc

2. 使用场景对比

Read more »

传统架构和云服务架构是两种截然不同的 IT 架构模式,各自有不同的优势和挑战。

1. 部署与维护

  • 1.1传统架构

    • 部署:通常部署在本地数据中心,企业需要采购、配置和维护硬件设备(服务器、存储、网络设备等)。
    • 维护:需要专门的运维团队来保证硬件、网络、操作系统、应用层等的正常运行,并且定期进行硬件升级和更换。
    • 成本:初期投资大,需要采购硬件设备、建设数据中心,且硬件设备需要长期维护和更换。
  • 1.2云服务架构

按需使用/serverless

Read more »

1. 临时修改主机名

打开 终端,输入以下命令来修改当前会话中的主机名:

1
sudo scutil --set HostName 新主机名

这会立即更新主机名,但只会影响当前会话。

Read more »
0%