Welcome to Ghost

You're live! Nice. We've put together a little post to introduce you to the Ghost editor and get you started. You can manage your content by »

一次网络超时的 Debug 过程

线上有部分机器连接外部存储时经常会会发生读写超时,通过 sar 工具查看网卡流量并不是太高,千兆网卡流入流出带宽只达到一半左右: $ sar -n DEV 2 01:59:39 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s »

谁修改了我的 Zookeeper 节点

zookeeper 集群一共有 5 台机器组成,上边记录的是应用程序的配置信息和进度信息。 程序在完成一些阶段性工作之后会将当前进度保存到 zk 上,这样就能够在程序意外 crash 之后能够恢复上次的进度。 之后发现本来某一个进程专属的 zk 进度点被多个进程修改,表现就是当正常的进程退出之后,节点的 mtime 以及 version 值依然在变化(节点本身的值一直是 0,看不到明显变化)。 现在的问题就是找到到底是谁在修改这个节点? zookeeper 日志 »

使用 GDB 调试 CoreDump 文件

写C/C++程序经常要直接和内存打交道,一不小心就会造成程序执行时产生Segment Fault而挂掉。一般这种情况都是因为数组越界访问,空指针或是野指针读写造成的。程序小的话还比较好办,对着源代码仔细检查就能解决。但是对于代码量较大的程序,里边包含N多函数调用,N多数组指针访问,这时想定位问题就不是很容易了(此时牛人依然可以通过在适当位置打printf加二分查找的方式迅速定位:P)。懒人的话还是直接GDB搞起吧。 神马是Core Dump文件 偶尔就能听见某程序员同学抱怨: “擦,又出Core了!”。简单来说,core dump说的是操作系统执行的一个动作,当某个进程因为一些原因意外终止(crash »

Nagle's Algorithm and Delay Ack

今天看 Redis 代码,当服务端接收到来自客户端的请求,服务端要为这个客户端初始化一个 redisClient 结构来保存这个连接的全部信息,代码在 networking.c 的 createClient() 函数。因为 Redis 采用的非阻塞式IO来处理各个文件描述符,所以这个函数首先要做的就是将 accept 返回的文件描述符(fd)通过 anetNonBlock() 函数设置为非阻塞。而接下来的这个anetTcpNoDelay()是起什么作用的呢? anetTcpNoDelay »