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

Amo*_*ari 4 ruby

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

Tim*_*ers 5

要查看全部:

Symbol.all_symbols
Run Code Online (Sandbox Code Playgroud)

参考: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
Run Code Online (Sandbox Code Playgroud)

现在,有人可以通过请求数百万个网址,用任意数量的符号填充您的 ruby​​ 进程空间,例如

http://your_app/some_action?p=a
http://your_app/some_action?p=b
http://your_app/some_action?p=c
...
Run Code Online (Sandbox Code Playgroud)

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