如何列出使用ruby / rails运行时/进程的所有符号

时间:2014-03-11 06:52:17

标签: ruby

只是想知道如何列出正在运行的ruby进程中使用的所有符号?最终想知道所有这些符号的大小,是否有限制或如何限制它或者当尺寸过大时是否应该担心它们

1 个答案:

答案 0 :(得分:4)

全部查看:

Symbol.all_symbols

参考:http://ruby-doc.org/core-2.1.1/Symbol.html#method-c-all_symbols

我不知道如何知道他们使用了多少内存,或者是否存在限制。但是,因为它们从不被垃圾收集,所以你应该担心它们。特别是,您永远不应允许将不受信任的用户输入转换为符号 - 这可用于在内存中运行应用程序。

有关将用户输入转换为符号的示例,请设想将用户提供的字符串转换为符号的rails操作:

def some_action
  my_sym = params[:p].to_sym
  # ...
end

现在有人可以通过请求数百万个网址(例如

),用尽可能多的符号填充您的红宝石流程空间
http://your_app/some_action?p=a
http://your_app/some_action?p=b
http://your_app/some_action?p=c
...

当内存不足时,可能(取决于很多东西)会杀死你的服务器。