只是想知道如何列出正在运行的ruby进程中使用的所有符号?最终想知道所有这些符号的大小,是否有限制或如何限制它或者当尺寸过大时是否应该担心它们
答案 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
...
当内存不足时,可能(取决于很多东西)会杀死你的服务器。