自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 change your vim into IDE

------------install vim------------easy to edit/look1 edit vimrc(/etc/vimr/ or ~/.vimrc), open "syntax on", enable syntax highlighting2 run "ctags -R" in your project's root dir  a

2014-07-22 15:55:59 454

原创 函数压栈顺序

函数的压栈顺序参数N        --> 栈底...参数1返回地址局部变量1...局部变量N --> 栈顶但是,调试发现,在windows和solaris上,栈都是向下增长的,即栈底高节,栈顶低字节,而linux似乎向上增长的

2014-03-29 17:21:29 558

原创 suse10下Java+eclipse安装

------安装jdk用oracle网站上sdk7 rpm包最后报错,不过解压生成的目录貌似没有问题,运行java -version出错Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object卸载jdk7,使用chinaunix下载的sdk6安装(感觉只

2014-01-12 21:22:55 1413

原创 持久化与数据同步的策略

还没完全想好:)貌似掉电时最会损失一部分数据

2013-12-24 17:48:44 508

原创 提高数据的可靠性

1 对文件的写入应采用创建临时文件、完成写入、替换原文件的模式2 对关键数据写入后要fflush而且fsync,同时采用较小的粒度,保证在一个磁盘单元读写内肯定完成,例如64字节(还是512?),这样在掉电时会减少数据的不一致性3 用文件header来记录文件的实际有效数据长度,必要时为文件头和记录中都添加crc4 如果要在多个文件间保持一致性,最好分步进行,先各个文件写入实际数据,在

2013-12-24 17:43:30 916

原创 提高io性能的技巧

1 合理设计你的文件粒度,太小的文件造成太多的磁盘随机读写,太大的文件会降低系统的可靠性,例如文件header损坏,你丢失的数据就更多2 同上道理,慎用fseek,这也需要你合理设计你文件中的数据结构3 采用合适的buf机制,你可以read/write 无buffread/fwrite 有buf,用setbuf/setvbuf增大buf可以增加效率,但它的作用不是无效发挥的,如果你

2013-12-24 17:30:14 1024

原创 linux 进程、线程间通信总结

IPC:管道、消息队列、共享内存、信号(只能用来做简单的通知或者与别的IPC结合起来)、信号量(常用来与共享内存结合,一种互斥的手段)、文件(需要与文件锁结合起来,例如多个读进程使用共享锁、一个写进程使用写锁,在进行自己的操作后应立即解锁,好让别的进程加锁成功)线程间通信:线程锁、条件变量、信号(简单通知)、信号量

2013-12-23 15:00:51 506

原创 linux性能测试与运行分析

静态(开发阶段)测试------gprofgprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的执行信息,可以得到每个函数的调用次数、执行时间、调用关系等信息,简单易懂。适合于查找用户级程序的性能瓶颈,对于很多时间都在内核态执行的程序,gprof不适合gprof默认只统计用户函数的信息,如果要统计库函数,应链接libc_

2013-12-20 15:10:11 792

原创 libevent使用心得

------libevent版本2.0,对每个新加创建bufferevent,注册读回调函数和错误回调函数(写由libevent执行默认行为),对客户端发来的数据直接发送回去,即echo server,测试有两个客户端,每个创建1000个连接,这样在总共2000个连接(400个active)上尝试每秒发收100MB数据(方式在所有活动连接上发一次消息,然后再在所有活动连接上收一次消息,这样减少

2013-12-20 12:29:13 1228

原创 linux 高并发socket通信模型

------select1 一个误区很多人认为它最大可以监听1024个,实际上却是文件描述符的值不能大于等于1024,所以除掉标准输入、输出、错误输出,一定少于1024个,如果在之前还打开了其他文件,那会更少2 select返回后,一般要轮询fd_set,发现新连接要加上,连接断开要去掉,这个过程一定要这样做:select之前把fd_set临时拷贝一份,轮询中对它的修改只在临时fd_set

2013-12-18 18:56:48 4938

原创 socket 超时connect

socket创建后设置为非阻塞,这样调用connect后它会立即返回,一般来说都是直接返回-1(因为3次握手还没结束)如果errno不等于EINPROGRESS,那可以马上判断连接失败,一般是ip地址非法,例如192.168.1.256,只有这种情况connect才会立即出错如果等于这个EINPROGRESS,接下来调用select,设置你期望的超时时间和创建的socket,如果sel

2013-12-18 16:58:30 591

原创 linux 死锁问题调试

pstack 及 strace查看进程当前hung在什么地方gdb attach又要调试的进程info threads查看每个线程运行在什么位置,主要查看__lll_mutex_lock_wait的线程t 切换到死锁的线程f 切换到正在lock的函数p 成员__owner说明等待的锁被什么线程获得同上,切换到那个线程,如果他等待的锁也被上一个线程获得,那就说明

2013-12-18 16:38:27 965

原创 linux 管道、消息队列、共享内存的对比

------管道管道的优点是不需要加锁,缺点是默认缓冲区太小,只有4K,同时只适合父子进程间通信,而且一个管道只适合单向通信,如果要双向通信需要建立两个。而且不适合多个子进程,因为消息会乱,它的发送接收机制是用read/write这种适用流的,缺点是数据本身没有边界,需要应用程序自己解释,而一般消息大多是一个固定长的消息头,和一个变长的消息体,一个子进程从管道read到消息头后,消息体可能被别

2013-12-15 14:36:15 12400 2

原创 linux管道原理与应用

管道实际上在内核创建了一个i node,和一个指向它的固定大小内核缓冲区(可以理解为类似cache,但读写不分开),传入的两个文件描述符就都指向这段缓冲区,这样读管道的0文件描述符和写它的1文件描述符,就好像读写这个文件一样,实现了进程间的通信。管道虽然说是半双工,不同时刻可以在两个方向流动,假设是这样的场景,一个进程创建了一个管道,然后创建子进程,父进程先写后读,子进程先读后写,我们

2013-12-12 15:29:19 1096

原创 Linux信号处理的一般方法

主线程阻塞一些信号,创建独立线程使用sigwait去获得这些信号,对他们调用自己的信号处理程序主要有 SIGINT SIGTERM SIGUSR1 SIGUSR2: 存储并同步(到磁盘)程序的重要数据,释放资源、程序退出SIGPIPE: 忽略SIGCHILD: waitpid 防止子进程退出后变为僵尸进程

2013-12-11 15:47:41 658

原创 C/C++程序启动后内存分布

1 从低地址开始,依次是代码区,数据区(包含静态数据区、常量数据区)、堆(自下向上生长)、动态库的文件映射、栈2 函数压栈:从高地址到低地址(也是从栈底到栈顶)来看,先是函数参数从右向左,然后是返回地址(调用函数前的下一行代码),被调用函数地址,EBP/ESP,局部变量(按从上到下的声明顺序)3 不同线程的栈有一定的间距,基本等同于线程栈的限制大小,线程切换前会保存当前线程

2013-12-09 21:14:50 499

原创 面试问题归纳

1 死锁问题调试2 skip kernel cache, use shared memory to read/write datadirect io vs no-direct io, dma,mmap3 cpu 调度,如何保证多个线程运行在不同的cpu核上4 tcp协议

2013-11-18 14:59:30 655

原创 No space left on device 原因总结

df -h检查空间剩余, 注意/var下剩余空间,某些程序默认在/var下创建临时文件df -i 检查i节点剩余ulimit -a 或查看/etc/securitylimits 查看文件大小限制,某些系统,如AIX,默认最大为1G

2013-01-28 11:39:27 881

原创 how to mount between Linux servers

for example, 10.200.13.36 want to mount dir in 10.200.13.35***** action in 10.200.13.35vim /etc/hosts.allowadd "ALL : 10.200.13.36"vim /etc/exportsadd "/root/testCRQP rcr-pdbuild2(rw,sync,no

2013-01-22 16:55:00 257

空空如也

空空如也

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

TA关注的人

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