初级会员
  • 第 5981 位会员
  • lobo
  • 2016-08-19 08:38:43
  • Offline
  • 24 83

最近发布的项目

    暂无

最近的评论

  • 评论了博文 网络协议
    关于 time_wait 相关: 链接1🔗https://www.cnblogs.com/dadonggg/p/8778318.html(time_wait的作用,带来问题) 链接2🔗http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28541347&id=5748888 (time_wait的作用,资源消耗计算) 问题: 在高并发短连接的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态(占着茅坑不拉翔)。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。 /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间 net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。 net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。 net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
  • 评论了博文 网络协议
    用 macos tcpdump 工具抓取网络数据探究 http 交互过程: 命令: tcpdump host 127.0.0.1 and port 80 -i lo0 第一次: 请求:Connection: keep-alive 响应:Connection: keep-alive 浏览器请求一次 ![image.png](https://static.studygolang.com/181015/96e85617a9bcaedfbe7ff5fa5db5a76b.png) 第二次: 请求:Connection: keep-alive 响应:Connection: keep-alive 浏览器请求多次 ![[图片]](https://static.studygolang.com/181015/7820630131decc3f56e6f25e6c62c834.png) 第二次: 请求:Connection: keep-alive 响应:Connection: close 浏览器请求一次 ![image.png](https://static.studygolang.com/181015/4ad6f7c9282200fd01d025e9ae9e84ec.png) keep-alive能保持http链接,多次请求不回产生新的SYN请求建立新的链接 close服务器传输数据完成直接发送FIN,请求关闭链接
  • 评论了博文 php
    #2 @lobo 各过程的意义: 1、 词法分析的作用就是将整个源程序分解成一个一个的单词, 这样做可以在一定程度上减少后面分析工作需要处理的个体数量,为语法分析等做准备。 除了拆分工作,更多的时候它还承担着清洗源程序的过程,比如清除空格,清除注释等。 2、语法分析器(Parser)通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。
  • 评论了博文 php
    查看PHP编译opcode扩展vld git地址: https://github.com/derickr/vld.git php -dvld.active=1 -dvld.execute=0 test.php
  • 评论了博文 php
    php5 变量内存使用情况 1、变量结构(64位系统) 为了解决引用计数无法检查并释放循环引用(使用的内存)这问题,PHP 使用了循环回收的方法。当一个 zval 的计数减一时,就有可能属于循环的一部分,这时将 zval 写入到『根缓冲区』中。当缓冲区满时,潜在的循环会被打上标记并进行回收。 实际使用 // 32字节 typedef struct _zval_gc_info { zval z; union { gc_root_buffer *buffered; struct _zval_gc_info *next; } u; } zval_gc_info; // 24字节 typedef struct _zval_struct { zvalue_value value; zend_uint refcount__gc; zend_uchar type; zend_uchar is_ref__gc; } zval; typedef union _zvalue_value { long lval; // 用于 bool 类型、整型和资源类型 double dval; // 用于浮点类型 struct { // 用于字符串 char *val; int len; } str; HashTable *ht; // 用于数组 zend_object_value obj; // 用于对象 zend_ast *ast; // 用于常量表达式(PHP5.6 才有) } zvalue_value; // 16字节 struct _zend_object_value {  zend_object_handle handle;  const zend_object_handlers *handlers; } zend_object_value; 此外 在堆(相对于栈)分配给 zval 的内存需要额外的字节 循环引用实例: 当对象A和对象B,相互引用了对方作为自己的成员变量,只有自己销毁的时,才能将成员变量的引用计数减1 ,因为对象A的销毁依赖于对象B的销毁, 对象B的销毁依赖于对象A的销毁,这样子就造成了循环引用,即使外部没有指针能够访问他们,但是他们依然不能被释放. 引用计数这种管理内存的方式虽然简单,但他不能很好的解决循环引用的问题