[#112166] [Ruby master Bug#19397] ruby -h fails with SIGSGV if ulimit -s is any else than unlimited — "john_d_s (John Damm Soerensen) via ruby-core" <ruby-core@...>

Issue #19397 has been reported by john_d_s (John Damm Soerensen).

7 messages 2023/02/01

[#112187] [Ruby master Bug#19403] Unable to Build Native Gems on Mac with Ruby 3.1.0+ — "jcouball@... (James Couball) via ruby-core" <ruby-core@...>

Issue #19403 has been reported by [email protected] (James Couball).

10 messages 2023/02/02

[#112213] [Ruby master Bug#19412] Socket starts queueing and not responding after a certain amount of requests — "brodock (Gabriel Mazetto) via ruby-core" <ruby-core@...>

Issue #19412 has been reported by brodock (Gabriel Mazetto).

13 messages 2023/02/03

[#112218] [Ruby master Bug#19414] uninitialized constant URI::WSS in 3.0.X and 3.1.X — "noraj (Alexandre ZANNI) via ruby-core" <ruby-core@...>

Issue #19414 has been reported by noraj (Alexandre ZANNI).

7 messages 2023/02/05

[#112220] [Ruby master Bug#19415] Incorrect circularity warning for concurrent requires — "fxn (Xavier Noria) via ruby-core" <ruby-core@...>

Issue #19415 has been reported by fxn (Xavier Noria).

7 messages 2023/02/05

[#112245] [Ruby master Bug#19421] Distribution documentation — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #19421 has been reported by ioquatix (Samuel Williams).

21 messages 2023/02/07

[#112262] [Ruby master Feature#19422] Make `--enabled-shared` mandatory on macOS — "nobu (Nobuyoshi Nakada) via ruby-core" <ruby-core@...>

Issue #19422 has been reported by nobu (Nobuyoshi Nakada).

8 messages 2023/02/07

[#112284] [Ruby master Bug#19424] Degradation in **Marshal load** only in Ruby 3.1.2 compared to 2.7.4 — "sumitdey035 (Sumit Dey) via ruby-core" <ruby-core@...>

Issue #19424 has been reported by sumitdey035 (Sumit Dey).

14 messages 2023/02/08

[#112304] [Ruby master Bug#19427] Marshal.load(source, freeze: true) doesn't freeze in some cases — "andrykonchin (Andrew Konchin) via ruby-core" <ruby-core@...>

Issue #19427 has been reported by andrykonchin (Andrew Konchin).

14 messages 2023/02/09

[#112320] [Ruby master Misc#19429] DevMeeting-2023-03-09 — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #19429 has been reported by mame (Yusuke Endoh).

15 messages 2023/02/10

[#112326] [Ruby master Feature#19430] Contribution wanted: DNS lookup by c-ares library — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #19430 has been reported by mame (Yusuke Endoh).

16 messages 2023/02/10

[#112329] [Ruby master Misc#19431] DevMeeting at RubyKaigi 2023 — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #19431 has been reported by mame (Yusuke Endoh).

35 messages 2023/02/10

[#112398] [Ruby master Feature#19435] Expose counts for each GC reason in GC.stat — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #19435 has been reported by byroot (Jean Boussier).

10 messages 2023/02/13

[#112399] [Ruby master Bug#19436] Call Cache for singleton methods can lead to "memory leaks" — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #19436 has been reported by byroot (Jean Boussier).

25 messages 2023/02/13

[#112433] [Ruby master Bug#19439] Marshal.load doesn't load Regexp instance variables — "andrykonchin (Andrew Konchin) via ruby-core" <ruby-core@...>

Issue #19439 has been reported by andrykonchin (Andrew Konchin).

8 messages 2023/02/15

[#112446] [Ruby master Bug#19442] Remove USE_RINCGC flag — "eightbitraptor (Matthew Valentine-House) via ruby-core" <ruby-core@...>

Issue #19442 has been reported by eightbitraptor (Matthew Valentine-House).

10 messages 2023/02/16

[#112457] [Ruby master Feature#19443] Cache `Process.pid` — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #19443 has been reported by byroot (Jean Boussier).

16 messages 2023/02/16

[#112494] [Ruby master Feature#19450] Is there an official way to set a class name without setting a constant? — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #19450 has been reported by ioquatix (Samuel Williams).

27 messages 2023/02/20

[#112503] [Ruby master Feature#19451] Extract path and line number from SyntaxError? — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #19451 has been reported by ioquatix (Samuel Williams).

9 messages 2023/02/20

[#112505] [Ruby master Bug#19452] `Thread::Backtrace::Location` should have column information if possible. — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #19452 has been reported by ioquatix (Samuel Williams).

13 messages 2023/02/20

[#112533] [Ruby master Bug#19455] Ruby 3.2: wrong Regexp encoding with non-ASCII comments — janosch-x via ruby-core <ruby-core@...>

Issue #19455 has been reported by janosch-x (Janosch M=FCller).

7 messages 2023/02/22

[#112538] [Ruby master Feature#19458] Expose HEREDOC identifier — "joelhawksley (Joel Hawksley) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5NDU4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGpvZWxoYXdrc2xleSAoSm9lbCBIYXdr

14 messages 2023/02/22

[#112552] [Ruby master Bug#19461] Time.local performance tanks in forked process (on macOS only?) — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #19461 has been reported by ioquatix (Samuel Williams).

11 messages 2023/02/23

[#112584] [Ruby master Feature#19465] [PATCH] reuse open(2) from rb_file_load_ok on POSIX-like system — "normalperson (Eric Wong) via ruby-core" <ruby-core@...>

Issue #19465 has been reported by normalperson (Eric Wong).

9 messages 2023/02/25

[ruby-core:112528] [Ruby master Feature#18285] NoMethodError#message uses a lot of CPU/is really expensive to call

From: "Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date: 2023-02-21 22:07:44 UTC
List: ruby-core #112528
Issue #18285 has been updated by Eregon (Benoit Daloze).





mame (Yusuke Endoh) wrote in #note-38:

> ```

> new: undefined method `foo' for main

> ```



I think that's quite confusing though without the `main:Object`, because `m=
ain` has many other meanings (main script =3D $0, main function, etc).

So I'd suggest either:

```

undefined method `foo' for main:Object

undefined method `foo' for main object

```



----------------------------------------

Feature #18285: NoMethodError#message uses a lot of CPU/is really expensive=
 to call

https://bugs.ruby-lang.org/issues/18285#change-101976



* Author: ivoanjo (Ivo Anjo)

* Status: Closed

* Priority: Normal

----------------------------------------

Hello there! I'm working at Datadog on the ddtrace gem -- https://github.co=
m/DataDog/dd-trace-rb and we ran into this issue on one of our internal tes=
ting applications. I also blogged about this issue in <https://ivoanjo.me/b=
log/2021/11/01/nomethoderror-ruby-cost/>.



### Background



While testing an application that threw a lot of `NoMethodError`s in a Rail=
s controller (this was used for validation), we discovered that service per=
formance was very much impacted when we were logging these exceptions. Whil=
e investigating with a profiler, the performance impact was caused by calls=
 to `NoMethodError#message`, because this Rails controller had a quite comp=
lex `#inspect` method, that was getting called every time we tried to get t=
he `#message` from the exception.



### How to reproduce



```ruby

require 'bundler/inline'



gemfile do

  source 'https://rubygems.org'



  gem 'benchmark-ips'

end



puts RUBY_DESCRIPTION



class GemInformation

  # ...



  def get_no_method_error

    method_does_not_exist

  rescue =3D> e

    e

  end



  def get_runtime_error

    raise 'Another Error'

  rescue =3D> e

    e

  end



  def inspect # <-- expensive method gets called when calling NoMethodError=
#message

    Gem::Specification._all.inspect

  end

end



NO_METHOD_ERROR_INSTANCE =3D GemInformation.new.get_no_method_error

RUNTIME_ERROR_INSTANCE =3D GemInformation.new.get_runtime_error



Benchmark.ips do |x|

  x.config(:time =3D> 5, :warmup =3D> 2)



  x.report("no method error message cost") { NO_METHOD_ERROR_INSTANCE.messa=
ge }

  x.report("runtime error message cost") { RUNTIME_ERROR_INSTANCE.message }



  x.compare!

end

```



### Expectation and result



Getting the `#message` from a `NoMethodError` should be no costly than gett=
ing it from any other exception.



In reality:



```

ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]



no method error message cost

                        115.390  (=B1 1.7%) i/s -    580.000  in   5.027822s

runtime error message cost

                          6.938M (=B1 0.5%) i/s -     35.334M in   5.092617s



Comparison:

runtime error message cost:  6938381.6 i/s

no method error message cost:      115.4 i/s - 60130.02x  (=B1 0.00) slower

```



### Suggested solutions



1. Do not call `#inspect` on the object on which the method was not found (=
see <https://github.com/ruby/ruby/blob/e0915ba67964d843832148aeca29a1f8244c=
a7b1/error.c#L1962>)

2. Cache result of calling `#message` after the first call. Ideally this sh=
ould be done together with suggestion 1.









--=20

https://bugs.ruby-lang.org/

 ______________________________________________
 ruby-core mailing list -- [email protected]
 To unsubscribe send an email to [email protected]
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-c=
ore.ml.ruby-lang.org/

In This Thread