При обновленнии проекта с rails 3.0 -> 3.2 некоторые страницы стали отдаваться сервером в несколько раз медленнее. В связи с чем пришлось искать инструменты для профайлинга. Перебрал кучу рабочих и не очень gem ов и пришёл к выводу, что кроме newrelic и ruby-prof ничего мне не поможет. Newrelick очень хорош, но он не позволяет углубиться как ruby-prof.
У ruby-prof есть несколько “printers” – классы, которые получают результаты профайлинга и преобразуют их в определённый формат. Самый интересный из них CallTreePrinter, его выхлоп можно анализировать qcachegrind.
Перед установкой qcachegrind необходимо установить qt и graphviz.
brew install qt
brew install graphviz
Далее устанавливаем qcachegrind.
wget http://kcachegrind.sourceforge.net/kcachegrind-0.7.3.tar.gz
tar xvf kcachegrind-0.7.3.tar.gz
cd kcachegrind-0.7.3/qcachegrind/
qmake -spec 'macx-g++'
make
Получаем qcachegrind.app, который можно запустить через
open qcachegrind.app
Профилировал я метод контроллера, выглядило это примерно вот так:
class TroubleController < ApplicationController
def slow_method
results = RubyProf.profile do
[ … slow code … ]
end
File.open Rails.root.join('tmp', "#{ self.action_name }_tree"), 'w' do |file|
RubyProf::CallTreePrinter.new(results).print(file)
end
end
end
Профилировал я две ветки, с двумя разными версиями rails -> на выходе получил два файла. Сравнивая их в qcachegrind, выяснил, что после обновления рельсы очень сильно выросло количество вызовов в Globalize::AR. Само собой это не связанно непосредственно с rails …
Конвертируем ISO образ в IMG.
hdiutil convert -format UDRW -o ~/path/to/converted.img ~/path/to/target.iso
Вставляем флешку и определяем адрес
diskutil list
/dev/disk0
| : | TYPE NAME | SIZE | IDENTIFIER |
| 0: | GUID_partition_scheme | *121.3 GB | disk0 |
| 1: | EF | 209.7 MB | disk0s1 |
| 2: | Apple_HFS Macintosh HD | 120.5 GB | disk0s2 |
| 3: | Apple_Boot Recovery HD | 650.0 MB | disk0s3 |
/dev/disk1
| #: | TYPE NAME | SIZE | IDENTIFIER |
| 0: | FDisk_partition_scheme | *1.0 GB | disk1 |
| 1: | DOS_FAT_16 NO NAME | 1.0 GB | disk1s1 |
В даном случае /dev/disk1
Размонитируем флешку
diskutil unmountDisk /dev/disk1
Записываем ранее сконвертированный IMG образ
sudo dd if=/path/to/converted.img of=/dev/rdisk1 bs=1m
Извлекаем флешку
diskutil eject /dev/disk1
BRAINWASHING
loading…