
linux
wwwsq
这个作者很懒,什么都没留下…
展开
-
Linux初始化设置
Linux安装好之后,有很多设置要修改,用起来才方便。1、修改包更新的源对于ubuntu:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后sudo vim /etc/apt/sources.list然后把内容替换为deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb http://mirrors原创 2020-07-22 14:32:52 · 366 阅读 · 0 评论 -
常见开源项目的代码统计
以下统计只包含了主要模块,比如gcc没有包含gcj等模块,LibreOffice只包含了core模块,等。名字版本主要开发语音代码行数(千行)kernel3.0C13380gcc4.6C5109coreutils8.16C246libevent2.0C68mysql5.5C++1677lighttpd1.4C56memcached1.4C11LibreOffice3.5C++约占90%7100原创 2012-04-10 02:38:54 · 2738 阅读 · 0 评论 -
[C++] getaddrinfo的一个bug
程序里面getaddrinfo()有可能会持续的返回 "Temporary failure in name resolution",与此同时ping域名却没问题。通常这是由于getaddrinfo()缓存了/etc/resolv.conf造成的。因此,在修改了/etc/resolv.conf之后,最安全的做法是重启一下服务器。你不能确保机器上的每个程序都正确的处理了getaddrinfo()重新加原创 2012-03-12 15:56:04 · 4722 阅读 · 2 评论 -
[Linux] 假死分析
所谓假死,就是能ping通,但是ssh不上去;任何其他操作也都没反应,包括上面部署的apache也打不开页面。作为一个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的。尤其是现在还有fd保护、进程数保护、最大内存保护之类的机制。你可以fork很多进程,系统会变得很慢,但是ssh还是能连上去;你可以分配很多内存,但是内存多到一定程度oom killer就会把你的进程杀掉,于是ss原创 2012-03-06 11:39:31 · 10084 阅读 · 1 评论 -
[C++] 关于gdb断点的真相
gdb的断点是基于信号(signal)实现的在某个地址增加一个断点,实际上就是修改那个地址的代码,把原来的代码替换成INT 3指令,同时让gdb捕获这个signal并做相应的处理:包括执行被替换掉的指令,并跳转回来。因此,只要断点不被走到,那么断点就不会影响程序的运行效率;因为程序的其他地方都没改变,该怎么运行还是怎么运行。gdb在遇到断点之后可以做很多事情包括:停下来等用户处理自动继续自动执行一原创 2011-12-29 11:22:46 · 4338 阅读 · 0 评论 -
redis再观察
分析redis的几个问题:1,redis的“脏快照”redis的持久化方式是后台线程慢慢写,则在写的过程中,如果外界进行了set,则redis写下的数据并不是一个干净的快照,而是一份数据可能不匹配的“脏快照”。举例来说:在SNS里面,AB各有10分,然后A扣了5分给B,,则A应该5分B应该15分,但是在redis的脏快照里面,可能是A5分B10分,总数不对。不要认为分数不重要,sns的用户整天就盯原创 2011-12-09 17:37:34 · 4293 阅读 · 1 评论 -
[C++] 内存保护
C++有内存保护吗,真的有:http://en.wikipedia.org/wiki/Buffer_overflow_protection这个只能保护stack上的buffer,不过已经很有作用了。写越界写坏callstack的概率低了很多。提醒:如果callstack没有效信息,更有可能是环境版本不匹配。真正写坏callstack这种事情很罕见的。另外,用ldd命令可以看两台机器的环境是否一致,原创 2011-12-13 14:34:06 · 2578 阅读 · 0 评论 -
[C++] 加速make的编译
make一个超大项目的时候,你有没有过痛不欲生的感觉,make有时候可以长达半个小时。现在是多核的世界,你可以试试make -j 10,有时候可以把编译速度提高五倍。也就是说原本要半个小时的编译,也许五六分钟就编译好了。注意:用make -j 10可能会遇到少数项目出问题。比如在编译openssl的时候,make -j 10就会编译出问题。不过大多数时候这个参数还是很有用的。请仔细测试。测试ok的原创 2011-12-13 13:16:29 · 3042 阅读 · 1 评论 -
[C++] gdb高级调试方法
1,启动gdb的时候自动执行脚本gdb -x your_script注意:your_script里面只能有gdb命令。不过我们都知道gdb命令里面有个shell指令,所以实际上这里可以做任何事。2,调试运行中的进程在gdb里面有个attach指令,可以调试运行中的进程。结合上面的-x参数,实际上我们可以写一个脚本,自动的attach到我们关心的进程上面,然后自动的做很多事情:比如设置trace命令原创 2011-12-20 01:41:50 · 7555 阅读 · 3 评论 -
[Linux] 通过shell给unix socket发送数据
例子:echo "show stat" | nc -U ../var/my.sock说明:nc不是脑残的缩写,是net cat的缩写。-U指明是unix socket适用场合:1,java没法和Unix socket通讯,但是可以调用shell脚本。这样就曲线救国了。2,有很多模块只提供了Unix socket的对外接口,用shell可以直接进行操作。原创 2011-12-07 12:56:27 · 10055 阅读 · 3 评论 -
[Linux] 服务器性能调优(CPU绑定)
我们都知道单进程、异步IO应该可以获得最优通讯性能。但现实里我们常常发现这种模式常常达不到预期的效果。这可能是由于网卡在和你的应用程序抢CPU。cat /proc/interrupts 看看你的网卡是几号中断,都在哪个CPU上工作?通常你的网卡应该工作在CPU0上面。(如果不是,可以把它绑到CPU0上面去)cat cat /proc/cpuinfo看看你有几个CPU,是多少核的。假设是双CPU*四原创 2011-11-03 17:26:55 · 4736 阅读 · 0 评论 -
[linux] 如何在vim里面把空格缩进改为tab缩进
有些同学喜欢用空格做缩进。因此很多代码的行首都带有连续重复的空格,有些是四个空格,有些甚至是八个空格。真是叔叔可忍婶婶不可忍。vim有一些retab之类的选项可以对所有vim处理的文档做缩进转换,不过那太野蛮了,我们不打算让vim自动处理所有文件。因此比较合适的方式是手动的来做这原创 2011-10-11 11:31:01 · 2783 阅读 · 2 评论