- 博客(6)
- 资源 (8)
- 收藏
- 关注
原创 利用glibc中锁结构的信息解决死锁问题
首先非常感谢老丁和老李同学的帮助,没有他们这个问题估计又得搞很久。遇见这个问题,真是头疼。不熟悉代码、不熟悉流程,但是领导还是把活给排下来了(实在不解),只能硬着头皮找了。问题是这样的,cache服务器中有一个存储对象的哈希表,每次访问哈希表时都要获取hash_rwlock读写锁,现在进程在获取读锁时死锁。使用gdb进入3个worker进程,发现死锁的位置都一样,都是在获取hash_rwloc
2013-07-26 14:32:26 2105 1
原创 类型转换导致的程序异常
通过下面的程序来介绍:#include int main(void){ int i; unsigned long long type = 0; unsigned long long a = 0; for(i=0;i<34;i++){ a = 1<<i; printf("a %llu, i = %d\n",a, i);
2013-07-25 18:07:28 1556
原创 gdb:不退出程序的情况下打印函数中的局部变量
参考资料:点击打开链接 借助于上面的参考资料,编写自己的脚本工具。参考资料中也是借鉴pstack这个工具,它是用一个脚本,脚本中通过调用gdb来打印当前运行的栈信息,而不用中断程序或手动gdb。更多的信息,还是去看参考资料吧,上面讲的比较详细。 我的脚本如下:#!/bin/shcommand="source key.gdb"readnever=""GDB=${GDB:-/us
2013-07-24 17:05:13 3595
原创 gdb:循环打印数组
今天为了精确查看集群中哈希表中每个机器占有的槽位数,所以需要在gdb中进行统计。哈希表是一个大的数组,如果直接使用gdb输出数量太大,而且没法统计。Google了一番,终于找到一种方法,分享一下,也便于日后查看。在gdb的脚本中循环遍历整个哈希表,并且加上判断条件来进行统计,然后输出结果。导入gdb脚本的方式很简单,gdb中输入“source 脚本名”。 我的脚本如下:set $i=32
2013-07-24 17:03:18 11446
原创 Linux kernel中网络设备的管理
kernel中使用net_device结构来描述网络设备,这个结构是网络驱动及接口层中最重要的结构。该结构不仅描述了接口方面的信息,还包括硬件信息,致使该结构很大很复杂。通过这个结构,内核在底层的网络驱动和网络层之间构建了一个网络接口核心层(这个叫法引自《TCP迁移报告》),这个中间层类似于文件子系统的VFS。这样底层的驱动程序就不需要过多地关注上层的网络协议,只需要通过内核提供的网络接口核心层就
2013-07-21 22:44:36 4408
原创 TCP协议中的SO_LINGER选项
SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成。没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回。如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间。以调用close()主动关闭为例,在发送完FIN包后,会进入FIN_WAIT_1状态。如果没有延迟关闭(即设置SO_LINGER选项),在调用
2013-07-19 11:28:19 2294
Linux_C高级程序员指南.pdfLinux_C高级程序员指南.pdf
2011-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人