• 修复cnpm install命令回退npm而不是使用npminstall进行快速安装
    修复cnpm install命令回退npm而不是使用npminstall进行快速安装无评论

    终于受不了npm的安装速度了,每次发布的耗时都能吃顿饭,让运维配合更换cnpm后查看输出日志却还是npm的格式,而不是npminstall的格式。

    运维给出了服务器上的执行脚本

    看上去并没有什么问题,本地带相同的参数也能够正常调用npminstall。

    怀疑cnpm版本问题,但是运维给出cnpm -v是4.4.0

    后来在postinstall的hook里输出process.env,发现有shrinkwrap的设置,而npminstall是不支持shrinkwrap的,但是本地即使添加shrinkwrap也不会让cnpm[……]

    Read more

    Read more
  • nodejs CorkedRequest导致内存泄露
    nodejs CorkedRequest导致内存泄露无评论

    0x00 状态

    有一个websocket长连接服务原先是用php的workerman框架跑的,但是近期出现了一些莫名其妙的bug,用Nodejs重写后接替了原先的全部流量。
    最初还没什么问题。
    跑了一段时间后发现内存泄露问题比较严重,服务器有8G内存,用cluster方式跑了8个进程,几乎24小时内就会吃满8g内存,导致进程被系统kill。

    0x01 堆内存分析

    遇到内存泄露,第一时间想到的就是把内存dump下来看看,于是发布了一个能够实时dump内存的版本,拿到heapdump文件后发现文件只有60M不到,而当时的进程内存占用达到了1.6G,于是能够知道大量的内存开销都不是堆内存,而是[……]

    Read more

    Read more
  • CentOS 7 下MariaDB修改datadir后无法启动
    CentOS 7 下MariaDB修改datadir后无法启动无评论

    前阵子想把服务器的CentOS 6.8升级上CentOS7。但是失败了,重装了系统

    重装以后挂载好数据盘后发现MariaDB起不来了,查journal log,只有一行warning

    can’t create test file /var/lib/mysql/core.lower-test

    google了一下,有两种方案

    第一是说selinux导致的,但是ucloud的镜像默认就是关闭selinux的,所以不是这个问题

    第二说是apparmor限制了进程的目录读写,但是那是Ubuntu下默认安装的,CentOS下没有这个东西,所以也不是这个问题。

    其他文件权限之类的都检查过了,而且[……]

    Read more

    Read more
  • 记一次nodejs的长连接websocket服务故障
    记一次nodejs的长连接websocket服务故障有1条评论

    故障最初表现是这样的,在客户端正常连接一段时间之后,无任何征兆的服务端会突然触发close事件从而进行连接断开的清理工作,将Redis和Mysql内的在线数据都清理掉了,导致推送时找不到该设备,但是客户端直接请求服务端的数据,服务端均能够正确响应。

    最初以为是node的ws模块有bug,在触发close事件的时候并没有真正关闭连接,所以在close事件触发的时候直接调用了socket._socket.close()来强制关闭连接,然而并没有什么卵用,情况并没有任何变化。

    随后开始了wireshark抓包,发现故障时,客户端会发来未知的opcode
    fecfce40-779f-11e6-8edf-f103b4c1845d

    在服务端收到这个错误的opcode后,[……]

    Read more

    Read more
  • nginx+php-fpm无法使用PUT和DELETE等方法
    nginx+php-fpm无法使用PUT和DELETE等方法无评论

    群里讨论nginx+fastcgi和apache+mod_php时,有人提到了nginx+fcgi不支持PUT和DELETE,会报405,所以只好通过劫持405状态码的方法来处理这些方法

    无标题

    但是这种方法过于蛋疼,再加上我以前在写php的时候是正常使用过这些方法的,于是提出了异议并且实现了PUT方法的demo。

    对比双方的fastcgi配置后,并没有发现什么区别,唯一的区别是我使用的是Tengine,而对方是nginx,而Tengine文档里并没有提到这一改动,于是只好继续测试

    QQ截图20160603203050
    真的出现了405,难道真的是Tengine对这方面做出了改动?

    不过如果输入完整的url,事情就有了转机[……]

    Read more

    Read more
  • Space Engineers 可编程方块从入门到放弃
    Space Engineers 可编程方块从入门到放弃有1条评论

    好好的一个游戏,玩着玩着就写起了代码

    游戏里的编辑器没有代码提示没有代码高亮,甚至连括号对齐都没有,于是我们首先需要搭一个VS下的开发环境,用于写代码

    并不是所有C#的内置类或者游戏类均可用,文章的最后会说明

    首先需要把游戏源码clone下来https://github.com/KeenSoftwareHouse/SpaceEngineers/

    为了不要一不小心修改了游戏代码,可以在解决方案里新建一个Console项目,然后添加对游戏项目的引用,然后让生成出来的类继承MyGridProgram类,
    并且修改Main方法,拿掉static,参数是(string args),
    添加需要用到[……]

    Read more

    Read more
  • WordPress升级PHP7后白屏
    WordPress升级PHP7后白屏无评论

    把bmclapi安顿到其他服务器上后,这台服务器终于有内存跑第二个fpm了,所以决定安装一下php7,让dz跑在5.5的fpm上,单独给wp上7

    安装完成后发现首页白屏,但是error_log里没有输出,即使打开WP_DEBUG,也只有几个Notice和Deprecated,按理来说不应该会导致白屏。

    直接输入url进入文章页面终于有报错了,报错信息是called undefined function eregi(),没有堆栈

    查了一下这个函数的文档http://php.net/eregi

    Warning This function was DEPRECATED in PHP 5[……]

    Read more

    Read more
  • carrotmq中文文档
    carrotmq中文文档无评论

    CarrotMQ是一个给NodeJS使用的RabbitMQ客户端,基于官方的amqplib,能够简化amqplib的复杂的操作

    Version npm
    NPM Downloads
    Dependencies
    NPM

    使用姿势

    RPC

    RPC Over Exchange

    events

    ready

    当carrotmq连接到rabbitmq并且声明好所需的exchange和队列后触发
    mq.on('ready', function(){});

    error

    我们[……]

    Read more

    Read more
  • for of和forEach的效率比较
    for of和forEach的效率比较有1条评论

    因为最近开始用generator处理异步逻辑了,所以遇到需要循环的地方如果使用数组,数组里再有异步逻辑的话使用forEach再带一个函数进去是无法当成异步逻辑处理的,所以就想用for of循环做枚举遍历,顺手写了个小测试当做性能对比

    结果发现效率是for of最差
    for of: 1351.440ms
    forEach: 688.484ms
    reduce: 462.045ms

    还有就是从哪个版本开始node的console.time能够精确到千分之毫秒了啊……

    Read more

Back to Top