查找 ruby 内存泄漏

本文没有深入探讨 ruby 的内存管理问题,本人水平有限,没有去深入看内存管理,而且我现在主要需要实现功能,这里只谈我是怎么解决问题的。 起因 提到内存泄漏,这是个非常麻烦以及难以解决的问题,ruby 是自动回收内存,不是像 c 一样手动回收,虽然大部分语言现在都是这样,但是这就导致一个非常麻烦的问题,内存泄漏怎么办。我在解决这个问题的时候心里是有阴影的,因为之前写过一个 swift 的图表动画,运行几次之后就变的特别卡。一直也没有找到原因,后来换了一种非常啰嗦的写法才解决。所以这次是心有余悸的。 事情的起端是我写了一个定时爬取数据的 ruby 程序。基本思路是用 ruby 来调用 python 脚本。然后通过 ruby 的 activerecord 存入数据库。为什么不用 python 直接存数据非得用 ruby 绕一下的理由是,activerocord 很好用,以及我想熟悉 ruby 栈,最后是这样可以和我的服务器 activerecord 无缝对接上,所以就用 ruby 了。 我的需求是每个整点的第 22 分钟时运行一次,这里使用了 ruby 的 rufus-scheduler,在这个 gem 里有一个是调用 cron。但是问题在于,真的调用 cron 了吗?我没有看源代码,但是最终根据我内存泄漏的原因,我分析是没有的。起因就是,我把程序上传到服务器上,每次运行 3-4 天之后服务器就无法 ssh,但是可以 ping。查了一下觉得有可能是内存泄漏,于是开始了排查。 排查 一开始我傻不拉唧直接在服务器上看内存使用。 1.CPU占用最多的前10个进程: ps auxw|head -1;ps auxw|sort -rn -k3|head -10 2.内存消耗最多的前10个进程 ps auxw|head -1;ps auxw|sort -rn -k4|head -10 3.虚拟内存使用最多的前10个进程 ps auxw|head -1;ps auxw|sort -rn -k5|head -10 我这里使用了第 2 个。但是这个方法是很傻的,因为你不可能每小时都登服务器,只能大概判断,不过我间隔了一段时间登录之后发现确实程序内存使用上升。于是切换到本地测试。...

五月 9, 2018 · 1 分钟 · Me

浅谈解决 Instagram 推送失效的问题

最近由于某些需要。需要关注 Instagram 的博主,ins 本身是提供了推送服务的,但是由于各种原因,经常收不到推送,这就需要自己采取爬虫的形式。 推送服务 推送服务有很多选择,除了国内的平台都可以。我在这里采取了比较灵活的 telegram bot。tg 是一款很伟大的产品,很简单的方式就可以对接机器人自动发布消息。 我采用了 telegram-bot-ruby 这个 gem,来将 ruby 脚本和 tg 联系起来。 虽然我更推荐你们使用 python 或者 php,在 GitHub 上有很多和 ins 相关的 python 的库,甚至可以调用到 ins 私有的 api 接口。由于我最近的技术栈都是 ruby 所以就采用了 ruby。 爬虫获取 ins 自身的网络请求是 api 分离的,这意味着如果爬虫爬取到了 json 接口之后可以直接获取 json 的数据。只需要在所有的 url 后面加上 ?__a=1 即可获得 json 格式的数据。 爬虫方案 我采取的方案是每 5s 请求一次。对比前一次和这一次的区别。这里就不详细叙述了。 网络请求优化及异常处理 由于我的程序一开始写的不够规范,导致重复请求过多。而 instagram 对于请求频率过于高的 ip 会返回 429 错误。429 是请求次数过多。 而在请求错误过多的情况下,会导致异常处理。这里我采取 try catch 的方案。 在逐步优化后我的爬虫现在平均每分钟运行 12 次。已经处于不会被封的范围内了。 小彩蛋 graphql 已经被 Instagram 采用。突然有一天的接口全部是 graphql 了。导致的就是需要重新修改 json 的解析。现在的解析还是有点复杂的。...

四月 9, 2018 · 1 分钟 · Me

Heroku 安装 Huginn

需要的东西 Codeanywhere 账号注册(用于 Heroku 环境配置) Heroku 账号注册 部分说明 由于 Huginn 是基于 Ruby 的,所以需要配置 Ruby 的环境。我们这里使用 Codeanywhere,就省去了配置 Ruby 环境。 Cloud9 是一个云端的 IDE,配置好了安装 Huginn 的所有环境,但是注册需要信用卡。(如果你有信用卡我推荐你使用这个。)我们这里使用 Codeanywhere,二者没有特别大的区别,Codeanywhere 比 Cloud9 少了 Heroku 的环境,我会详细说明如何在 Codeanywhere 上配置 Heroku 的环境。 部署步骤 登陆 Huginn Github 主页的 Deployment 部分,找到 Heroku 的按钮。然后点击,就会跳转到你的 Heroku 了。 点完按钮之后会跳转到你的 Heroku 界面。去起个名字。 起晚名字什么都不点,直接拉到最后点 Deploy 的按钮。 之后它就会开始 build 了。等会就行。 这里 View 就直接到建立好的网站了,Manage App 会跳转到 Heroku 管理界面。我们点击 View。 这样就进入到网页了。这里 Huginn 很人性化的把步骤贴出来了。由于我们用的是自动安装,所以没有创建管理员用户,也有一些东西需要配置。(可以看到已经可以访问域名了) 现在我们对照着 Huginn 的说明来做。 登陆 Codeanywhere,点击右上角的 Editor。 会进入一个选择界面,如我截图。...

五月 14, 2017 · 1 分钟 · Me

我的 Kindle 使用技巧

上学期买了 Kindle,于是 Kindle 就成为了我日常必备的物件…而且我觉得 Kindle 是我买过的超值的一个东西,所以有必要把我的一些使用心得写一写。 首先要解释一下,当你拿到 Kindle 的时候,会需要一个亚马逊的账号,除此之外每个 Kindle 还会对应一个邮箱(邮箱名可以修改),一般是 @kindle.cn 结尾的。可以在你的 Kindle 设置里或者在亚马逊官网找到。这个邮箱的用途之大。如果你想要什么书的话,直接用邮箱发个附件到你的 Kindle 邮箱,然后 Kindle 连上网就能自动下载这本书了。还可以在主题加上 convert,这时候要发 pdf 格式的话会自动转存 Kindle 格式,不过不推荐,pdf 格式会经常转乱。 还有要解释的,Kindle 的格式是 azw3 的,mobi 格式也能被 Kindle 读取,pdf 格式也可以,但是 pdf 在 Kindle 上阅读体验只差,因为字太小没法调整。如果是前两种格式的话,可以在 Kindle 中自动调整字体大小,还能重新排版,体验之好。所以如果看 pdf ,还是买一个 iPad Pro 吧。 解释完了,下面强势安利几个能用得上,可以让你的 Kindle 使用效率翻上 N 翻的东西。 微信公众号:亚马逊Kindle服务号 微信号:cn_Kindle 这是亚马逊官方的微信公众号,除了会推荐一些书之外,还组织过读书的活动。不过这个公众号最大的杀器就是,和你的专属 Kindle 邮箱绑定之后,可以将微信公众号的文章推送到你的 Kindle 上。对于我这样一个微信公众号重度使用者,是非常有用的。 有时候来不及看了就直接传到 Kindle 上。具体使用就是长按你要看的公众号,选择"…",就会有一个“亚马逊Kindle服务号的”,发送就可以了。也可以打开文章在右上角选择"…"。具体的使用方法关注之后可以自己查。 除此之外,应该还可以在微信端买书之后直接推送到 Kindle,因我都是用电脑,所以还试过这个功能。 微信公众号:Kindle电子书库 微信号:kindle10000 这个其实不该安利的,但是作为 Kindle 新用户可以使用玩玩。因为这其实就是一个盗版图书的汇集地…我刚开始的时候用,最近都买正版了。所以我不会很详细的说怎么使用,需要的自己去关注就好。 简单的说就是,它会用你的邮箱给你的 Kindle 邮箱发邮件。具体的绑定不难,就是利用了邮箱协议。关注之后它的说明非常之详细。 这个的好处在于,你想看什么书直接在微信里输它就会帮你查找,如果确定要看,那么点击推送等一会就可以在你的 Kindle 上看到了。使用之方便是难以言表的。...

九月 6, 2016 · 1 分钟 · Me

工作室总结

这个总结,想到哪写到哪。 大三下的一学期,感觉整个人和工作室融合的非常之密切。因为接手工作室已经大三下了,大三下存在几个问题: 如果招新,那么他们只有一学期的成长时间。 工作室濒临垮台。 我自身的时间有限,不可能全部精力放在工作室上。 面对上面两个问题,在学期初给自己定了几个目标: 招人,工作室不能死。 如果招到人,尽我最大努力去教他们一些技术上的东西。 尽可能多在工作室呆着。 对于招人,我只能说很幸运,在詹导可姐还有各位导生的大力帮助下,我们工作室招人的时候尽然出现了工作室坐不下的情况。当然这里大二占了大多数。也有大一的。当时和闫哥想,这么多人,能最后坚持下来的有多少呢。事实证明,淘汰率依然很高,最终留下的人工作室的位置占了一半。很多人坚持了几星期,也有很多人坚持了大半学期,可能因为课业问题放弃了。最终留下的这些人,我相信他们或多或少学到了很多东西。 如何用一学期的时间去让招来的人在技术上有一个质的飞越,这是我所思考的。对于这一点,我也在学期初定下了几个目标: 教会他们用谷歌,用 stackoverflow 多看英文资料,多用英文搜索 教会他们用 GitHub 教会他们看源码 如果时间充足,补充一些函数式编程方面的知识 后台从 Java 全面换向 Ruby 其实上面几个实现起来说是简单,其实比我预想的要难一点。就拿用谷歌来说,为了让他们用谷歌,我硬是花大价钱买了路由器,连上路由器就能翻墙。但是难点在于,十几年的百度习惯不可能说改就改。再比如多看英文,有几个人能踏踏实实看英文?大部分人我相信对于英文还是有厌恶感的。看英文都厌烦,用全英文的搜索更是难。看英文烦,那么用stackoverflow和GitHub就会烦。再加上刚学,技术实力达不到,看源码也是很费劲的。 同时对于我自身来说,面对这么多人,加上我和闫哥还想做一些事情,加上课业,就显得很麻烦。 在初期的时候,我的精力大多放在培养新人,但是很多时候培养的并不好,我自身的原因也很大,这是我所没有想到的,包括我和闫哥的配合上,也存在很大的问题。 对于我存在的问题,我去学院工作室和许聚龙聊了一次,和詹导聊了一次。也进行过很多思考,并和闫哥讨论,重新分工等等,做了一些改变。但是由于各方面,更多是自己水平不足能力有限,导致工作室很多事务出现了一些拖延等,这是我所需要在后面的日子检讨的。 除这些之外,针对工作室之前的问题,我也有以下几个想做改进的地方: 工作室不是全部学技术的地方,大家的感情也很重要,尤其是负责人和下面人的关系。是为了别人更好,而不是压榨大于感情。 如果实现盈利,钱大家分,无论创业也好,不创业也好,根据劳动力来发工资。作为项目负责人,可以多拿,但是还是要秉承不压榨。 对于盈利的大部分,作为工作室的经费,用于聚餐,学弟学妹们接手工作室之后使用。不会什么都不留下就离开工作室。 我们技术很牛逼,但不是最牛逼的 以上几点,说我是隐射也好,什么也好,是我想做的一些改变。比如第二点,如果一个项目10万,最后分到真正开发人员手里就两三千甚至更少,不知道还好,如果知道,开发人员心里会怎么想,还能不能踏踏实实的跟着boss干。我不是说不可以压榨,压榨也有一个度。我经历的度,未免是我在学校那么工作室里看到压榨比例最高的了。比如第一点,如果我发自肺腑愿意跟着某个boss干,boss却不给予真心相对,我相信即使是创业团队,也不应该吧。我更是觉得,创业,靠的是大家拧成一股绳,各自分散,能干什么呢?技术也是一样,BAT 再厉害,做不到踏踏实实的去静下来钻研一个技术,阅读源码,技术永远不会提高。 这是我想去改变的,也是我希望后面工作室的人可以去改变的。 对于我所提到的上面提到的四方面的目标,这学期基本完成任务。 工作室没死,活的很好,我们人现在也不少,我也在这学期尽可能的在工作室呆上更多的时间。而且,如果说创业,核心的人肯定是有了。 甚至这学期最最厉害的,可以说是我们大三的几个,除了我,都找到了很好的实习。**琪姐去了腾讯,闫哥去了搜狐,金妮去了百词斩。**不能说和我有很大的关系,但是也有那么一点关系吧。这是后面可以去很骄傲的说的,也是工作室很厉害的一个体现。 在技术上再多说一些。我在用一学期的时间把工作室打造的可以去创业,如果他们有这个新的话。 举几个例子来说,我们的后台从 Ruby 换到了 Java,这一点杜奎奎的功不可没。Ruby 太适合创业了。再比如,解决问题的能力,经过我一学期疯狂的洗脑,现在虽然很多人不愿意用英文搜谷歌,但是也愿意用中文搜谷歌了。这就意味着,他们解决问题的能力会比一般人强上一大截。 教会他们用谷歌,用 stackoverflow 多看英文资料,多用英文搜索 教会他们用 GitHub 教会他们看源码 如果时间充足,补充一些函数式编程方面的知识 对于我定下的技术上 1-6 的实现,基本上是比较圆满的了。下面分别来说一下。 对于第一点,除了让工作室的无线网直接可以上谷歌之外,我在最开始的时候经常教他们如何去debug,我是做 iOS 的,但是利用谷歌和stackoverflow,可以很好的弥补技术栈的缺失。比如给张瑞调bug的时候,调了几次,他就意识到,原来英文搜索那么厉害,那么牛逼。在这一点上,我还举行过分享,来证明谷歌比百度好。 对于 GitHub 的使用,因为没来及做分享,但是花时间写了一篇博客,质量个人感觉还比较高。 看源码这一点,由于很多能力上的问题,他们的水平可能暂时还打不到,但是我每天说每天说,也很好的给他们洗脑了。 最后一点,我也进行了分享,给他们说了一点函数式的东西。 除此之外,我们经常聚餐,我常说,我这学期请你们吃饭的次数,顶上过去我在工作室吃饭次数的总和了,还都是工作室掏钱。我自以为和他们处的都不错,至少我在用心的对待他们,这就可以了。 这学期做了一个项目,对于分成,很负责人的说,我拿的也就比他们多一两百块钱而已…因为我从对接到各个部分都参与了。剩下的钱,除了聚餐之外,都留给他们用作日常开销了。 比较负责任的说,算是基本完成了预期的目标。 中间有一次和迪哥聊了一下,迪哥说我们没有魄力了,不去做东西了,对此我想解释一下。 首先来说,工作室之前留下的坑,稍微有点大了。技术上,人力上,成长上,都存在很大的问题,我在填,而且我想把这群娃带好,我用了一年半的时间来到现在的水平,我需要用一学期的时间让他们达到,这是需要时间的。而且,工作室不能死在我们手上,说是要交要交,真的就交了?不现实。创业也好,做东西也好,需要看情况来做。不是我不想做,用一学期的时间做别人两学期的事情,这是很耗费精力的。 当然,这只是说辞,我说了我也存在一些问题,确实也存在,这是我要去改变的,人无完人,我也不是样样精通,所以这学期有什么做的不好的,也需要一些谅解。 最后还想说一点,给现在的纯技术的工作室。做应用做网站想创业,可以,当然可以,但是难度在逐渐变大,如果有机会我还负责工作室,给我一学期加两个月的时间,我绝对带这个工作室转型。 下学期,工作室需要过渡的后面的娃们去做了,我也已经尽我最大的努力去给他们营造一个更好的环境和技术栈了。希望他们能很好的发展。...

八月 26, 2016 · 1 分钟 · Me