Я абсолютный новичок даже без компьютерных знаний. Я просто инженер-механик, пытающийся реализовать способ удаленного мониторинга выходной мощности (и других выходных данных) инверторов в устанавливаемых нами солнечных энергосистемах. Поэтому, если я скажу что-нибудь чрезвычайно глупое, я заранее извинюсь.
Я пытаюсь написать небольшую программу ruby, которая будет жить в папке базы данных моего сайта. Каждые 15 минут (пока система работает в режиме онлайн), я хочу, чтобы она опрашивала данные от инверторов наших клиентов (через соединение TCPSocket к шлюзу, подключенному к инвертору клиентов) и обновляла файл базы данных моего сайта новыми данными , У меня цикл выглядит примерно так:
last_min = Time.new.min
while(1) do
tsec = Time.new.sec
tmin = Time.new.min
if ( ( tsec == 0 ) && ( tmin - last_min == 1 ) ) # test using one minute
# poll inverters, update database
last_min = tmin
end
end
Когда я запускал его сначала, он выдавал ошибку Segmentation Fault. Затем я поставил GC.disable
наверх, и он работал нормально (пока я не заставлю выйти только через пару минут), но это было только для того, чтобы посмотреть, была ли это проблема сбора мусора, и это, кажется, первое создание объект времени, который вызывает проблему (выдает ошибку ошибки сегментации). Я знаю, что я не могу отключить сборку мусора для бесконечного цикла. Но как мне «почистить себя» с помощью рубина? Могу ли я как-нибудь освободить эти объекты времени в конце каждого цикла? Я видел сообщение о GC.start
, но не мог понять, как это работает.
Также есть ли способ запустить мою программу и посмотреть, сколько оперативной памяти она использует? Я был бы признателен за любой совет, который кто-нибудь мог бы предложить мне здесь. (Включая рекомендации по общей архитектуре системы контроля солнечной выходной мощности, которую я описал в начале!)
Я уже получил большую выгоду от просмотра всех постов здесь в моем путешествии до сих пор, и я заранее благодарю вас!