0%

问题描述

业务背景: 有一台由多个Docker容器组成的仿真设备环境,1个Docker部署Redis服务端,剩余每个Docker都作为Redis客户端,用于模拟一块单板。

问题: 仿真设备启动中,概率出现Redis的某个字符串键被不符合预期地改写成空串,导致客户端Docker从Redis获取的数据有问题。需要定位是哪个Docker上的哪个进程改写了Redis数据库。

阅读全文 »

背景介绍

GDB不仅可以用来调试程序,还可以直接修改被调试程序的二进制文件。这种方式相比于改源码重新编译、gdb attach有什么优势呢?考虑以下企业生产环境中的几个调试场景:

  • 需要修改的二进制文件是其他领域的,你没有源码和编译工程,让相关领域出调试对接件比较费时,但你只想临时改一行别人的代码,几分钟内完成验证。
  • 调试环境上,使用gdb attach进程方式有困难
    • 被调试的服务(进程)没有启动断点(可定位性很差),或者gdb手动拉起的方法非常复杂,等服务正常启动后再attach已经赶不上打断点的时机。
    • 长时间gdb挂住业务进程导致触发丢心跳复位。
    • 你不确定修改的二进制文件同时被几个进程加载,但你诉求很明确,就是直接改文件,对所有进程生效。

以下举一个简单的例子,介绍GDB修改程序二进制文件的技巧:

阅读全文 »

前言

docker拉取的镜像默认存储在根路径(/var/lib/docker),但根路径存储空间有限。我们可以通过挂载更大的磁盘,将docker数据迁移到挂载磁盘上, 以解决空间不足问题。具体方法如下:

阅读全文 »

背景

git clone龟速或出错,需要配置代理。

方法

首先,你的本地机器必须有socks5代理

git bash,敲如下命令:

1
2
3
4
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
git config --global http.sslverify false
git config -l
阅读全文 »

简介

Redis提供了AOF(append only file)持久化功能,通过保存服务器执行的写命令的方式记录数据库状态。本文介绍如下内容:

  • AOF持久化的实现 (命令追加、文件写入、AOF重写、AOF后台重写)
  • 如何通过AOF文件还原数据库
  • AOF持久化的配置选项
  • AOF和RDB两种持久化方式的比较
阅读全文 »

简介

Redis是基于内存的数据库,服务器进程退出后,内存中的数据会丢失。为了解决这个问题,Redis提供了RDB持久化机制,将内存中的数据保存到硬盘,从而避免数据意外丢失。

RDB持久化

RDB持久化将某个时间点上的数据库状态保存到一个RDB文件,这个RDB文件是一个经过压缩的二进制文件,Redis服务器可以通过读取RDB文件还原数据库状态。

阅读全文 »