新手问题 Ruby 脚本总是使 CPU 占用率 100%

syhsyh9696 · 发布于 2017年06月27日 · 最后由 luikore 回复于 2017年06月29日 · 620 次阅读
28730

大家好,我有一个简单的ruby脚本提供一个简单的telegram-bot功能。

但是我发现这个telegram-bot的脚本总是在一定时间之后CPU占用率就会 飙升,我没有找出哪里可能溢出,恳请大家帮帮我。

bot脚本在这里

共收到 20 条回复
2564

ruby 版本呢?

0b45a6

100% 是把一个核心吃满还是把所有核心吃满了?如果是后者那肯定是 handle_thread 方法里线程相关的问题了。如果是前者我读了一圈觉得有几个可能出现死循环问题的地方,但这脚本不太方便部署调试。

254

lz token 都贴出来了.......

27349

https://ruby-china.org/topics/25959 建议试试ruby-prof,查看一下CPU消耗在哪些地方。

28730

@kikyous 无论是2.3还是2.4都这样

28730

@liprais 哈哈无所谓啦,不想再搞解析yml了

28730

@sec 谢谢,我去看看。

28730

@dsh0416 只是一个单核机器....

12637

楼主的 MySQL database 名称震惊了

28730
12637marksloan 回复

没错就是干这个的

18855

老司机发车了。。。

27349
28730syhsyh9696 回复

隐藏彩蛋。。 这都可以

96

答应我,给个车牌好不好。

21568

竟然在ruby-china上开车。。。

8aa100

惊了😂

9800

老司机也有翻车的一天,大家还得安全驾驶啊。。

28931

client = Mysql2::Client.new(:host => "127.0.0.1", :username => "root", :password => "XuHefeng", :database => "javlibrary") 建AV图书馆

2880

你看这段代码, 如果 str 里带有单引号, 简单就出一个错, 如果 str"'; drop database ...;" 就注入攻击啦

client = Mysql2::Client.new(:host => "127.0.0.1",
                            :username => "root",
                            :password => "XuHefeng",
                            :database => "javlibrary")

result = client.query("SELECT * FROM video WHERE video.license='#{str}'")
if result.size == 0
    client.close
    return javlibrary_get(str)
end

出错后, client.close 就不执行了 (后面也同样), 随着时间的推移就会越来越多连接咯

28730
2880luikore 回复

原来是这样,那我是不是应该catch一下异常保证错误不出现呢?

还是应该专门写一个method保证整个查询是安全的呢?

2880
28730syhsyh9696 回复

你可以用 client.escape http://www.rubydoc.info/github/brianmario/mysql2/file/README.md#Usage

另外我不知道你的 telegram bot 会否调用 listen() 多次... 如果你也不知道就最好防御性的保证一下...

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册