自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 Cavium SSL加速卡驱动移植到Ubuntu

因为cavium ssl加速卡的驱动指定的系统是Fedora,而我们的系统是Ubuntu,所以肯定要移植了,看一下Release_Notes.txt里面的Supported Features: Supported Features ================== System architecture ------------------- - 32/64

2015-05-21 18:14:53 4713 9

原创 通用开地址hash表

在《算法精解:C语言描述》中看到两个hash表的实现,一个是链式hash表,一个是开地址hash表,我在平时工作的项目中用到了开地址hash表,也做了一些修改和优化,在这里分享一下,原理不想重复讲了,网上或者书上都有,这里只讲我修改的代码。下面是全部源码:

2015-05-10 09:27:45 1346 4

原创 ThinkPHP获取带条件数据总条数(行数)

ThinkPHP的Model.class.php里有count方法,但是并不能传入where条件,只能得到整个表的数据行数,这就给我带来一些不便了,比如我想根据一些条件来查询数据并做分页显示

2015-04-29 19:52:45 24113

原创 ldns老版本隐藏得比较深的bug

问题:        我在nginx中fork出一个进程来专门做DNS解析的工作,在本地开发环境中一切正常,而在线上服务器环境中这个进程就不定期的死掉重启,而且还不太容易复现。排查:        直接在线上服务器开启coredump,让linux帮忙把进程挂掉时的core文件保存下来,再用gdb分析,后来如愿得到core文件了,用gdb调试,从调用堆栈来看,是死在glibc的_int

2015-04-08 00:58:08 1374

原创 SystemTap使用技巧【四】

1、查看内核文件中函数的执行流程        前段时间研究了一下Linux内核信号处理流程,记录一下用到的技巧吧。        其实如果不用工具,硬是看代码去分析这个信号处理流程的话,还真的可能搞不定,因为不知道看到的代码是否得到执行,有可能都没有编译进去,所以适当的用工具去分析和调试,真的事半功倍。那信号处理从哪里入手呢,当然从系统调用开始,这就用到SystemTap使用技巧【一】中

2015-04-06 13:08:26 8793 6

原创 源码剖析signal和sigaction的区别

这两个函数都是Linux下注册信号处理函数有关,但是它们的区别一般我们都是从书上、网上、man手册得知,要想对它们的区别了然于胸,源码剖析才是彻底的方法。先来看这两个函数的区别和实验:1、signal比sigaction简单,但signal注册的信号在sa_handler被调用之前把会把信号的sa_handler指针恢复,而sigaction注册的信号在处理信号时不会恢复sa_handle

2015-04-01 22:08:51 9235 4

原创 进程异常退出导致死锁的解决办法

最近碰到这么一个问题:程序先获得锁,然后进行一些操作,操作完成之后再把锁释放掉,然而在获得锁之后进行的一些操作中可能导致程序异常退出(比如段错误),可以看出还没有来得及把锁释放进程就蹦掉了,从而导致这个锁长期没有被释放,其他想尝试获取锁的进程都会失败。       这个问题在多进程模型中很容易出现,下面是一个比较简单的多进程模型程序例子:dead_lock.c:#include #i

2015-03-31 10:31:50 7279 4

原创 Linux线上系统程序debug思路及方法

很多程序长期在线上系统跑着,可能跑着跑着就coredump了,而这种bug比较难复现,这个问题估计困扰不少同行朋友,这里记录一下我的一些思路,如有不对之处,欢迎指正。1、coredump文件       这个方法很基础了,相信大家都知道,具体步骤如下:ulimit -c unlimitedulimit -c unlimited' >> /etc/profileservice a

2015-03-31 01:22:58 2630

原创 Linux内核模块Makefile一个新手容易犯的错

又是受csdn bbs中一个帖子的启发,发现这个问题我之前也遇到过,所以就深入研究了一下。以下是文件结构:root@jusse ~/develop/kernel_module/helloworld# tree.├── hello.c├── Makefile├── mymax.c└── mymax.h0 directories, 4 fileshello.c:#include

2015-03-29 20:43:30 9089 2

原创 ThinkPHP模板多层继承

帮朋友用ThinkPHP写一个网站,最近就碰到ThinkPHP模板不能多层继承的问题,就跟这里讲的问题一样:http://www.thinkphp.cn/topic/26853.html      比如base.html是这样:...base内容1... name="content">...base内容2...     a.html继承base.html:

2015-03-12 09:26:06 5862 1

原创 thinkphp处理jQuery EasyUI form表单问题

jQuery EasyUI form表单不是ajax方式提交,而是在提交的时候新建一个隐藏的iframe并在iframe里面创建一个与绑定表单一样的表单,然后在iframe里面进行同步提交而不是异步提交,提交时只刷新iframe里面的页面,而在iframe外面的页面看来就像是异步提交了,这样做有一个好处——能上传文件或者图片,因为ajax方式是无法上传文件的。但是jQuery的form方法处理响应

2015-02-27 12:20:16 5681

原创 SystemTap使用技巧【三】

1、代码执行路径     在分析代码的时候,能清晰地观察代码执行路径对Debug效率很有帮助,比如,最近在分析内核tcp回复ack的代码执行路径的时候就用到这个技巧2、调试内核模块参考:http://blog.chinaunix.net/uid-14528823-id-4726046.html

2015-02-16 22:27:39 2797

原创 Linux screen标题显示screen id(即pid)

screen是一个很不错的工具,有一个功能非常吸引我,就是可以保留shell终端和多屏幕,比如从自己PC ssh到远程Linux工作,突然间网断了,或者自己PC重启了,重新ssh到远程Linux之后再attach到之前的screen就可以继续之前未完成的工作了。家里网络经常抽风,正在写代码时突然网就断了,screen的这个功能对我非常有用,如果没有这个之前的工作可能就会因为断网而丢失了。再比如,在

2015-02-08 17:23:19 6269

原创 fclose(stdout)和close(1)的区别

在论坛里有人问【发现close(1)和fclose(stdout)效果并不一样,为什么?】 ,勾起了我的好奇心,于是研究了一把,记录一下。#include #include #include #include #include #include #include int main(int argc, char *argv[]){ int fd = open("/dev

2015-02-03 09:26:16 9726 5

原创 SystemTap使用技巧【二】

1、跟踪进程执行流程。     当我在学习新代码时,首先想要了解的是代码的处理流程,比如在学haproxy和nginx的时候,首先想看看它们是从main函数开始后怎么从内核收发数据,这个是我学习这两款软件的切入点,在还没学会SystemTap之前,硬是看了好几遍代码啊,而且很多地方有条件编译或者函数指针就比较难分析了,后来用gdb设断点分析总算大体流程能分析明白了,但还是不太理想。最近才发现S

2015-01-21 20:45:26 5846

原创 SystemTap使用技巧【一】

SystemTap是一个强大的调试工具,确切的说应该是一门调试语言,因为它有自己的语法,也有解析、编译、运行等过程(准确的说有五个阶段),但它主要解决的问题是收集Linux内核或者用户进程的信息,主要目的是调试。我一直以为gdb、kgdb是Linux最强大的调试器,曾经爱不释手,自从发现了SystemTap之后,又有了当初喜欢gdb的那种感觉了,真的是相见恨晚啊。gdb和SystemTap不是竞争

2015-01-18 23:50:39 14881 6

原创 一个ldns的例子

ldns是一个提供DNS解析的开源库,可以实现各种DNS服务器或者客户端的功能,最近项目中有用到,所以就记录一下,需求是这样的:nginx的upstream server中可以配置域名,nginx的upstream模块会解析出域名对应的IP,然后就跟配置IP的server一样了,但这样配置是死的,当域名的A记录改变时(在用DNS来做负载均衡时)就必须重载nginx配置文件才能生效,这样就得重启ng

2015-01-07 21:17:27 8468 1

原创 gdb调试python运行中的进程

python虽然是脚本语言,但有时候也会出一些奇怪的问题,比如假死之类 的。对脚本语言来说,调试比较简单,加个print语句就可以了,这也是比较原始的方法,简单的问题print基本上可以解决,但复杂的问题,还是得通过调试器来辅助啊。最近就碰到比较棘手的问题,一个python爬虫进程运行一周之后就假死了,不知道是什么原因导致的,这个爬虫进程要是C写的二进制程序就好办了,直接gdb attach上

2015-01-01 10:34:58 9671

原创 libcurl删除HTTP头部方法

C或者C++写HTTP客户端还是libcurl比较强大,支持HTTP/HTTPS,而且Cookie的管理很强大。自己写HTTP消息免不了管理HTTP的头部,曾经就为了删除一个HTTP头部耗费了好几天,翻遍了谷歌百度还是只找到官方的方法,官方的文档中说删除HTTP消息头是这样的:struct curl_slist *headers=NULL;headers = curl_slist_app

2014-12-25 19:31:05 6059

原创 nginx内存池基本原理及问题

nginx的内存池相关文章已经很多了,这里写一下简单原理和最近碰到的问题。用到的几个结构,相应说明请看注释://每次能从pool分配的最大内存块大小,ngx_pagesize在X86下一般是4096,即4k,也就是说每次能从pool分配的最大内存块大小为4095字节,将近4k#define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1)//

2014-12-22 14:55:59 1485 2

原创 码如其人

古人云:字如其人,而对我们码农来说,

2014-11-22 17:32:42 992

原创 Linux下反汇编指定的函数

在debug二进制程序的时候,难免会用到

2014-11-20 21:38:07 8671 3

原创 python requests接收chunked编码问题

最近用python的requests写个爬虫下载

2014-10-22 15:41:13 45363 10

原创 systemtap双指针(多级指针)解引用

systemtap入门文章参考:http://blog.csdn.net/justlinux2010/article/details/17653601

2014-10-20 22:41:32 2094 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除