神奇的cpu 100%

系统cpu占用 100% ,但是没有一个进程使用cpu很高,如下:

祭出 vmstat 看看吧:

in/cs 都很高

结果发现有类似下面的一个程序:

于是当 /tmp/my_test_file 不存在时,程序在拼命地”生孩子<=>死掉”;于是,你不知道那个进程占用cpu很高,你只知道cpu被用光了

阿里云SLB的tcp代理的一个测试

号称阿里云的SLB可以处理syn-flood攻击,如何实现的呢?

猜想:

阿里云的SLB在做tcp代理时,如果能在和client端tcp握手成功之后,再和后端服务器进行tcp连接,然后进行正常的服务,这样不就可以很好地避免后端服务器遭受syn-flood攻击了吗?

测试:

  1. 在A机器上添加iptable规则,drop掉所有SLB进来的数据包(就是为了drop掉syn-ack),避免成功创建连接
  2. 在A机器上抓包,在SLB后面的机器上抓包
  3. 从A机器向SLB发送请求
  4. 结果:SLB后端机器上可以看到syn请求

如果符合猜想,则:SLB后端机器上不会看到syn请求;事实上看到了syn请求,于是,不符合猜想。

结论: SLB在做tcp代理时,不会在和client握手成功之后才向后端服务器发起tcp连接的。(可能那样会比较麻烦,可能需要处理序号之类的东西)

对于一个高级的tcp负载均衡设备来讲,当接到client的syn包后,就先去连接后端,如果后端能连接,再syn-ack给client,这样逻辑上是好的

linux 之 mv

缘起

mv是多么简单的一个命令啊,但是,获取有些东西你真的不知道。

一个同事mv big_dir_of_small_file to_other_disk ; 明明看着目标地址的空间使用在增加,但就是不见源地址的空间使用在减少,为什么呢?

lsof 查了一下,移走的文件没有立即删除。那就应该是全部移完之后再删除了。

因为文件实在太多,如果中断了程序,会是什么结果呢?

猜测:

  1. 删除移过的文件,保留没有移动的文件
  2. 那么,移动一半的文件是删除还是不删除呢?

参看: http://lingrok.org/xref/coreutils/src/mv.c

解疑:

其实代码很简单,就是先copy,最后在删除,根本没处理执行一半时被中断做何处理;所以,如果中断的话,就是:copy多少算多少,不删除任何文件。

学点儿expect吧

几十台虚拟机需要修改root相关内容,只有一个普通账号的key,没有root的key,虽然普通账号可以sudo到root,但是脚本中的ssh使用sudo是不行的,于是,使用脚本生成一大堆命令行,手动粘贴执行,太low了

学点儿expect吧: http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html

 

 

 

nginx + fastcgi + php-fpm 配置

  1. nginx和php-fmp保持长连接的设置
    1. 参考: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
    2. 设置
      keepalive 8;  //数字自己定吧,只要大于0就行,但是没有就不行

      fastcgi_keep_conn on;

  2. 关于单个连接同时处理多个请求的情况:
    1. fastcgi的设计来看,单个连接是可以同时传输多个请求的;对于多线程或事件驱动型fast-cgi server 是有一定好处的
    2. 对于特定的fastcgi-server,比如: php-fpm是不会同时处理多个请求的,所以fastcgi的该特性对于php-fpm是没有用的
    3. 问题: nginx何以知道后端的fastcgi-server是不能同时处理多个请求的?没有找到相关的nginx配置来告知nginx能否同时发送多个请求给相同的后端fastcgi连接; 难道nginx只能同时在一个连接上只分发一个请求?

json in java

参考资料: http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html

测试IDE: Intelijj

坎坷:

  1. 按照文档,下载了json-lib-2.4-jdk15.jar
  2. 开始写代码 (忘记了下载其他的依赖了)
  3. 编译,没有问题
  4. 执行,类找不见
  5. 由于不熟悉,浪费了一些时间
  6. 解决办法:
    1. 把异常中找不见的类放在程序的上面import一下(当然,肯定没有该类),IDE会提示类找不见,但是提示中可以“find in web”
    2. 然后就“find in web”,下载后,继续允许,继续报“类找不见”(当然,是其它的类),继续步骤1,直到不再报错

 

输出结果:

 

MAC 上的iptable

mac上原本使用ipfw来完成类似iptable的事情,但是

The ipfw command is deprecated in OS X Mountain Lion and later, but it has not been removed from Mavericks. If you run man ipfw, a message will appear saying: This utility is DEPRECATED. Please use pfctl(8)instead. While you may want to do port forwarding with pfctl to future proof your solution, these instructions showing how to use ipfw to do port forwarding will still work on OS X Mavericks.

http://knowm.org/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/

关于pfctl的使用: https://gist.github.com/kujohn/7209628

arp命令详解

  1. arp表项中只能显示本网段的IP地址的信息(别问为什么),不要试图看到非当前网段的IP地址的mac地址信息

  1. (imcomplete) 的意思就是这个IP的mac地址获取不到(可能机器没有启动呢),所以,HWtype、HWaddress、Flags、Mask都是没有的,但是根据路由表信息可以知道Iface是p3p1

  1. arp -a   显示的更加humanable ,这里试图显示每个IP的主机名,如果查不到就显示“?”, 一般我们不关心主机名,所以可以直接arp   或 arp -n

linux 之 proc

  1. /proc/pid/fdinfo/   记录了打开的fd的信息,位置信息(pos);
    1. 如果进程正在处理一个大文件,可以通过pos信息了解进程处理到哪里了
  2. /proc/pid/io  记录了该进程读写io的信息,可以方便知道是哪个进程在频繁地写磁盘了

 

参考资料:

linux在线man: http://man7.org/linux/man-pages/

proc: http://man7.org/linux/man-pages/man5/proc.5.html