Home

ccache和cgo并存的问题

ccache是加快编译的神器,有了ccache,忘了distcc。但是发现go和c混编的项目里面如果用了cgo的话,go编译的时候ccache会报错。主要是传给ccache的某些参数ccache不认识。错误如下: /usr/bin/ccache: invalid option – ‘d’ Usage: ccache [options] ccache compiler [compiler options] compiler [compiler options] (via symbolic link) Options: -c, --cleanup delete old files and recalculate size counters ...

Read more

使用nfs挂载网络磁盘

分布式环境下经常需要到各个节点启动server,常见的方式推的方式,比如scp到各个结点,但是有时候更新的文件少儿需要scp的文件比较多。这时候可以选择nfs挂载的方式把编译好的文件放到网络磁盘上,然后共享到其他的服务器,这样可以按需使用。 首先配置一下nfs服务器。假设系统都是centos: yum install -y nfs-utils yum install -y portmap rpm -qa | grep nfs 事实上看centos6.5以上portmap应该被rpcbind替代了,而已安装nfs-utils的时候应该顺便安装了rpcbind。之后配置一下需要挂载的磁盘: 文件/etc/exports: /tmp rz*(rw,async) yf*(ro) ...

Read more

跨线程解锁安全的spinlock

在C语言下面我们可能会写出如下的代码: static pthread_spinlock_t lock; __attribute__((constructor)) void lock_constructor () { if ( pthread_spin_init ( &lock, 0 ) != 0 ) { exit ( 1 ); } } int func(xx) { int ret = 0; if (xx) { ret = ERR1; goto exit; } pthread_spin_lock(&lock); if (xx) { ret = ERR2; ...

Read more

有关coredump没有符号的问题

线上server core掉了,看dmesg能看到core的日志, s3store[16586]: segfault at 2a28000 ip 00007fda20543b58 sp 00007fd9e9894128 error 4 in libc-2.12.so[7fda204ba000+18a000] 但是/proc/sys/kernel/core_pattern指向的位置并没有core文件,改一下core_pattern再跑应该能core出来,不过并不是稳定复现的。所以只能先凭这条日志来分析了。从core的位置看,大概率应该是malloc里面的问题。用 addr2line -e xxx 00007fda20543b58 看到的结果是??:0。怀疑是glibc没有调...

Read more

union和struct相互嵌套时的初始化

typedef union { volatile int64_t atomic; struct{ int32_t pid; int32_t atomic32; }; } S3Atomic; int main(int argc, const char *argv[]) { S3Atomic atomic = ; printf("%x\n", atomic.pid); printf("%x\n", atomic.atomic32); printf("%lx\n", atomic.atomic); return 0; } 参考如下代码 /* * This sample shows definition and initiation of a struct...

Read more

logrotate版本问题

线上运维过程中切日志用了logrotate,但无奈日志打的太多,一天的日志几十G难以分析,遂决定改成每小时切分一次日志。从logrotate的说明看有hourly的支持,但是直接把daily改成hourly之后启动报错: unknown option ‘hourly’ 感觉是logrotate 3.8.7的版本不支持hourly语法 rpm安装logrotate高版本的包提示缺少fillup和其他的依赖,同时glibc的版本也要求高版本。于是下载了logrotate的源码安装,以最新版本3.9.2为例 ./autogen.sh ./configure 提示缺少libpopt头文件,下载了libpopt 1.5的源码安装,提示libtool版本不对。我擦嘞。 后来突...

Read more

迷失在时间里

好久没写写自己心里的感受了。大概自从毕业工作之后,每天忙很多的事情,就不再有心情去体会一些事情。习惯了忙碌于工作,在这个城市的街头、地铁和公交站穿行,每天想的是五环的房价、今天有没有雾霾和路上堵不堵,只有夜深人静的时候才会想起以前的日子。 想起北航的参天大树,想起以前的同学,想起清华的荷塘,想起校园里美好的日子和可爱的女生,想起晚上安静的校园和校园外的车水马龙。大学的生活确实是人生最美好的几年,让你无论什么时候回想起来都觉得心底柔软、岁月静好。 有时候觉得自己迷失在时间里了。每天早晨醒来,想的都是匆匆逝去的时间和忙不完的事情。停下脚步,听见风穿过的声音,才觉得时间的洪流里面,也有这些许的温存,有难得的避风港,让灵魂停下来歇息一下。哎,我曾经是多么感性的一个人啊… 物是人非。尽量不...

Read more

dirname和basename的一些细节

作为获取文件名和文件路径的函数,dirname和basename的签名是: #include <libgen.h> char *dirname(char *path); char *basename(char *path); 之前没注意的地方是这个函数的输入输出都不是const的,也就意味着这个函数调用过程可能会修改char*指向的string内容。所以直接输出一个不可变字符串是不行的,同理,也要考虑这个非const函数会破坏入参。也就是: char *str = “/abc/def”; printf(“%s\n”, dirname(str)); 会core掉。而 #include <stdio.h> #include <lib...

Read more