In checking a report of defined?() calls being a hot spot in a fog application, I wanted to measure that actual overhead.
Here's the very simple benchmark code:
require 'benchmark/ips'
DEFINED_CONST = true
Benchmark.ips do |x|
# REQUIRED: The name of your application | |
app_name: foo | |
# REQUIRED: The system user to run your app servers as | |
app_user: foo | |
# REQUIRED: Notification emails (e.g. monit) get sent to this address | |
# | |
admin_email: "[email protected]" |
java.lang.NullPointerException | |
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333) | |
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988) | |
at org.jruby.RubyModule.cacheHit(RubyModule.java:984) | |
at org.jruby.RubyModule.searchWithCache(RubyModule.java:943) | |
at org.jruby.RubyModule.searchMethod(RubyModule.java:933) | |
at org.jruby.RubyClass.finvoke(RubyClass.java:523) | |
at org.jruby.RubyBasicObject.send19(RubyBasicObject.java:1504) | |
at org.jruby.RubyKernel.send19(RubyKernel.java:2240) | |
at org.jruby.RubyKernel$INVOKER$s$send19.call(RubyKernel$INVOKER$s$send19.gen) |
def element_generator(count) | |
['{"class": "LocationUpdateWorker", "queue": "default", "args": {} }'] * count | |
end | |
def batched(element_count, batch_size) | |
Sidekiq.redis do |r| | |
r.del(:list_test) | |
r.rpush(:list_test, element_generator(element_count)) | |
start = Time.now |
require 'benchmark' | |
CYCLES = 1_000_000 | |
app = lambda do |env| | |
[ | |
200, | |
{ 'Content-Type' => 'text/html' }, | |
['Hello World'] | |
] |
23:41:17,368 ERROR [org.apache.catalina.connector] (ajp-/172.16.3.2:8009-4) JBWEB001018: An exception or error occurred in the container during the request processing: java.lang.NullPointerException | |
at org.jboss.as.web.session.ClusteredSession.update(ClusteredSession.java:973) [jboss-as-web-7.2.x.slim.tb3.incremental.2.jar:7.2.x.slim.tb3.incremental.2] | |
at org.jboss.as.web.session.DistributableSessionManager.loadSession(DistributableSessionManager.java:1389) [jboss-as-web-7.2.x.slim.tb3.incremental.2.jar:7.2.x.slim.tb3.incremental.2] | |
at org.jboss.as.web.session.DistributableSessionManager.findSession(DistributableSessionManager.java:681) [jboss-as-web-7.2.x.slim.tb3.incremental.2.jar:7.2.x.slim.tb3.incremental.2] | |
at org.jboss.as.web.session.DistributableSessionManager.findSession(DistributableSessionManager.java:84) [jboss-as-web-7.2.x.slim.tb3.incremental.2.jar:7.2.x.slim.tb3.incremental.2] | |
at org.apache.catalina.connector.Request.doGetSession(Request.java:2605) [jbossweb-7.2.0.Final.jar:7.2.0.Final] | |
at |
ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 48) MSC00001: Failed to start service jboss.infinispan.web.default-host/ROOT: org.jboss.msc.service.StartException in service jboss.infinispan.web.default-host/ROOT: org.infinispan.CacheException: Unable to invoke method publ | |
ic void org.infinispan.statetransfer.StateTransferManagerImpl.waitForInitialStateTransferToComplete() throws java.lang.InterruptedException on object of type StateTransferManagerImpl | |
at org.jboss.as.clustering.msc.AsynchronousService$1.run(AsynchronousService.java:87) [jboss-as-clustering-common-7.2.x.slim.incremental.9.jar:7.2.x.slim.incremental.9] | |
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45] | |
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45] | |
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45] | |
at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.0. |
In checking a report of defined?() calls being a hot spot in a fog application, I wanted to measure that actual overhead.
Here's the very simple benchmark code:
require 'benchmark/ips'
DEFINED_CONST = true
Benchmark.ips do |x|
incompatible character encodings: ASCII-8BIT and US-ASCII | |
org/jruby/ext/stringio/StringIO.java:1155:in `write' | |
/usr/local/rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/bindata-1.4.5/lib/bindata/io.rb:266:in `write_little_endian_bits' | |
/usr/local/rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/bindata-1.4.5/lib/bindata/io.rb:156:in `writebits' | |
(eval):7:in `do_write' | |
/usr/local/rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/bindata-1.4.5/lib/bindata/struct.rb:217:in `do_write' | |
org/jruby/RubyArray.java:1613:in `each' | |
/usr/local/rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/bindata-1.4.5/lib/bindata/struct.rb:217:in `do_write' | |
/usr/local/rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/bindata-1.4.5/lib/bindata/base.rb:184:in `write' | |
/usr/local/rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/bindata-1.4.5/lib/bindata/base.rb:197:in `to_binary_s' |
nirvdrum@melchior ~/dev/workspaces/mogotest $ JRUBY_OPTS="$JRUBY_OPTS -X+C -J-XX:PermSize=512m -d" bundle exec rake | |
java.lang.ClassNotFoundException: rubygems.defaults.OperatingSystemService | |
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) | |
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) | |
at java.security.AccessController.doPrivileged(Native Method) | |
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) | |
at org.jruby.util.JRubyClassLoader.findClass(JRubyClassLoader.java:128) | |
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) | |
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) | |
at java.lang.Class.forName0(Native Method) |
14:24:21,355 ERROR [stderr] (OOB-181,shared=tcp) Exception in thread "OOB-181,shared=tcp" java.lang.NullPointerException | |
14:24:21,357 ERROR [stderr] (OOB-181,shared=tcp) at java.util.concurrent.ConcurrentSkipListMap.comparable(ConcurrentSkipListMap.java:659) | |
14:24:21,357 ERROR [stderr] (OOB-181,shared=tcp) at java.util.concurrent.ConcurrentSkipListMap.doPut(ConcurrentSkipListMap.java:848) | |
14:24:21,358 ERROR [stderr] (OOB-181,shared=tcp) at java.util.concurrent.ConcurrentSkipListMap.putIfAbsent(ConcurrentSkipListMap.java:1881) | |
14:24:21,359 ERROR [stderr] (OOB-181,shared=tcp) at java.util.concurrent.ConcurrentSkipListSet.add(ConcurrentSkipListSet.java:232) | |
14:24:21,359 ERROR [stderr] (OOB-181,shared=tcp) at org.jgroups.protocols.MERGE3.up(MERGE3.java:270) | |
14:24:21,360 ERROR [stderr] (OOB-181,shared=tcp) at org.jgroups.protocols.Discovery.up(Discovery.java:375) | |
14:24:21,360 ERROR [stderr] (OOB-181,shared=tcp) at org.jgroups.protocols.TP$ProtocolAdapter.up(TP.java:2474) | |
14:24:21,361 ERROR [stderr] (OOB-181 |