-
minitest based:
rails test -
rspec based:
rspec -f d -c
- on main/master branch update etalon with
http 'localhost:3000/report?start_date=2015-07-01&finish_date=2021-12-12' > payloads/etalon.html
- checkout branch with changes and run
ruby app/lib/profiling.rbto see if those changes was a source of degradation
-
find in Linux repositories apache2-utils and install it (on deb-based linux
sudo apt install apache2-utils) -
run
ab -s 128 -n 3 http://localhost:3000/report\?start_date\=2015-01-12\&finish_date\=2021-02-17 -
try to change
start_dateandfinish_dateand set period to 2.. 3.. 4.. days, month and years -
don't forget to turn off Turbo Boost/PowerTune and power saving mode on your machine…
-
use &profile=measure_mem to run simple memory profiling implemented in ApplicationHelper
-
use &profile=ruby_prof for gem 'ruby-prof' and use output file
rubyprof.callgrind.out.xxxxxwith a visualizer -
run
QCachegrindQt app for visualization and use one of these views-
Flat
-
CallStack
-
Graph
-
callgrind (CallTree)
-
-
use Valgrind Massif visualizer which makes screenshots with graph of memory consumption
RubyMine must have build-in Graph visualization
gem 'memory_profiler' provides similar to 'ruby-prof' memory usage information
-
use derailed_benchmarks with my Rake task and profile memory usage by gems at boot:
# to cut off files with insignificant memory usage to help eliminate noise # the task is using 0.1 MiB for ENV['CUT_OFF'] by default CUT_OFF=0.3 RAILS_ENV=development rake perf:mem CUT_OFF=0 RAILS_ENV=development rake perf:mem
-
test MB threshold in PigCI
-
configure threshold in the
spec/rspec_helper.rbfile -
run report_spec request spec (it uses
load_seed, but it's better to use files frompayloads/to get better report) -
all other tests must be with
describe … , pig_ci: false doin their RSpec metadata -
check pig-ci's resulting report in
pig-ci/index.htmlfile
Add &profile=json to report forming url http://localhost:3000/report?start_date=2015-01-12&finish_date=2021-02-17
and the upload formed json file tmp/stackprof.json to web app https://www.speedscope.app/
or to generate SVG image add to that report forming url&profile=raw and then pass tmp/stackprof.raw to flamegraph.pl script in console
TASKS:
make
app/lib/fast_report_builder.rbfaster or begin withapp/lib/slow_report_builder.rb
current "fast" budget is APPROX_BUDGET = 0.15, THRESHOLD_METRIC_IN_SECONDS = 0.2, see
app/lib/profiling.rbuse prefix "faster_" for report's name, by editing
app/lib/benchmarks/db_file_io.rbfilechange payloads/data_18.txt with payloads/data_6000.txt
- don't forget to change postfix "_small" with "_big" for report's file name, see the
db_file_io.rbfileadd changed "faster" report builder to Minitest/RSpec and run benchmarking test
use more derailed_benchmarks gem to perform soak (endurance) testing