Home

谈谈 overcommit memory

春节前几天运维大侠说要扩容 Redis 从库但同步一直失败,看日志发现在做 bgsave 的时候一直失败。 日志如下: [41738] 04 Feb 11:16:39.859 * Full resync requested by slave. [41738] 04 Feb 11:16:39.859 * Starting BGSAVE for SYNC [41738] 04 Feb 11:16:39.860 # Can't save in background: fork: Cannot allocate memory [41738] 04 Feb 11:16:39.860 * Replication failed, can't BGSAVE 从日志可以看到 fork 的时候内存分...

Read more

php 如何检查 TCP 连接是否关闭

长连接可以减少建立连接的过程, 使用长连接可以提高服务的性能。php 很多扩展都支持长连接,如 redis, memcache, mysql 的主流扩展都支持。 我们知道长连接就是一次建立连接,使用之后不会马上释放,而是把这个连接放到连接池。那么引发的一个问题就是,我们下次使用时如何知道这个连接是否已经被关闭。 我们来看看 phpredis 是如何来判断,连接是否可用。 phpredis 检查的函数在 library.c 的 redis_check_eof 的方法,而这个方法调用的是 php 内部的方法 php_stream_eof, 我们来看这个方法的具体实现。 PHPAPI int _php_stream_eof(php_stream *stream TSRMLS_DC) {...

Read more