Linux: проект ест ресурсы процессора?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Linux: проект ест ресурсы процессора?

Сообщение Владимир » 11.01.2018 16:35:51

[quote}
Можно выключить части - и опытным путем нащупать проблему, допустим отключить вывод SQL данных, загружать но не выводить. Если будет расти - то проблему искать в уже в реализации получении данных.
Но это опять предположение[/quote]
Ребят, я ж написал - сделал ТЕСТОВЫЙ проект, там кроме приведенного кода нет НИЧЕГО. Никаких запросов к БД.
И если не выводить часики - все Ок!

Добавлено спустя 1 минуту 33 секунды:
Ребят, я ж написал - сделал ТЕСТОВЫЙ проект, там кроме приведенного кода нет НИЧЕГО. Никаких запросов к БД.
И если не выводить часики - все Ок!

Добавлено спустя 2 минуты 35 секунд:
olegy123 писал(а):Можно выключить части - и опытным путем нащупать проблему, допустим отключить вывод SQL данных, загружать но не выводить.


Ребят, я ж написал - сделал ТЕСТОВЫЙ проект, там кроме приведенного кода нет НИЧЕГО. Никаких запросов к БД.
И если не выводить часики - все Ок!

Добавлено спустя 19 минут 9 секунд:
Вот весь код:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, ComCtrls,Math;

type

  { TForm1 }

  TForm1 = class(TForm)
    Label1: TLabel;
    Panel1: TPanel;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  ttt:Integer;
implementation

{$R *.lfm}

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
  ttt:=200;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  dt:TDateTime;
  mm,ss:Integer;
begin
  dt:=time;
  ttt:=ttt-1;
  mm:=ttt div 60;
  ss:=ttt mod 60;
  StatusBar1.Panels[0].Text:=IntToStr(mm)+' мин '+IntToStr(ss)+' сек';//
  Label1.Caption:=TimeToStr(dt);
  //два предыдущих вывода грузят ЦП
  //а этот - нет
  Form1.Caption:=IntToStr(mm)+' мин '+IntToStr(ss)+' сек';
  if ttt=1 then ttt:=200;
end;
end.
     


Добавлено спустя 3 часа 55 минут 46 секунд:
И да, ситуация опробована на 4-х машинах.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: проект ест ресурсы процессора?

Сообщение zoltanleo » 12.01.2018 19:13:20

Если владеете работой в доп.потоке, создайте там непрерывный цикл, вроде такого
Код: Выделить всё
While {true condition} do
begin
  //создание коннекта к БД (через Create), получение результата
  //отправка результата в основной поток SendMessage/PostMessage
  //убивание коннекта (через Free)

  sleep(<интервал таймера в мс>);
end;

Наверняка, утечек не будет, и код прозрачен и управляем
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Linux: проект ест ресурсы процессора?

Сообщение Владимир » 12.01.2018 19:22:39

zoltanleo писал(а):Наверняка, утечек не будет, и код прозрачен и управляем

Блин, устал уже повторять: в тестовом проекте НЕТ работы с БД!
Есть просто вывод времени в StatusBar и Label. Ресурсы ЦП и память растут только под Linux, под Win все Ок
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: проект ест ресурсы процессора?

Сообщение zoltanleo » 12.01.2018 21:30:54

Владимир писал(а):Блин, устал уже повторять: в тестовом проекте НЕТ работы с БД!

Чудак-человек. Ну сделайте вывод неск. потоков без БД, как например здесь

да помониторьте, течет ли память. Если не течет, значит от TTimer'а придется отказаться
Последний раз редактировалось zoltanleo 13.01.2018 19:32:55, всего редактировалось 1 раз.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Linux: проект ест ресурсы процессора?

Сообщение olegy123 » 12.01.2018 21:42:21

поотрубай по отдельности StatusBar и Label

Память под Linux может расти еще и от свойств менеджера памяти, т.е. он буфера может не сбрасывать до последнего..
sync; echo 3 > /proc/sys/vm/drop_caches

Добавлено спустя 4 минуты 30 секунд:
Запустил я тест у себя..

Хм.. память растет постепенно..

Добавлено спустя 3 минуты 33 секунды:
ps показал RES | SHR
вначале было: 142976 24636
через час стало: 143240 25164
- это
RES - Resident memory size & SHR - Shared Memory size

Добавлено спустя 6 минут 1 секунду:
тут пишут что это нормально:
https://groups.google.com/forum/#!topic ... d_hGn4-Eto
48-72 hours может расти, в зависимости от нагрузки..
связано это с выделением ядра памяти..

Добавлено спустя 15 минут 9 секунд:
pmap <pid>
дает очень интересную инфу..

Добавлено спустя 3 минуты 16 секунд:
https://elinux.org/Runtime_Memory_Measurement
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux: проект ест ресурсы процессора?

Сообщение Владимир » 12.01.2018 22:49:29

olegy123 писал(а):поотрубай по отдельности StatusBar и Label

Ну слава Богу - поотрубал - все Ок (там в коде я все описал!!!)

Добавлено спустя 2 минуты 48 секунд:
olegy123 писал(а):Запустил я тест у себя..

Хм.. память растет постепенно..


Да Вы шо? Не может быть! (шучу) А CPU% не растет?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: проект ест ресурсы процессора?

Сообщение olegy123 » 12.01.2018 22:52:52

Хаха...
при поиске res memory linux java
джабисты негодуют.. почему Hello Word разрослась до 4Gb VM

советуют применить ulimit
https://www.opennet.ru/base/sys/ulimit_mc.txt.html

Добавлено спустя 3 минуты 6 секунд:
Владимир писал(а):А CPU% не растет?
CPU растет, но это может тесно связано с relocate memory.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux: проект ест ресурсы процессора?

Сообщение Владимир » 12.01.2018 23:08:47

olegy123 писал(а):CPU растет, но это может тесно связано с relocate memory.

Может быть, но у меня приложение работает сутками-месяцами, случайно заметил, что спустя неделю CPU% около15...
Пока решил проблему выводом "часиков" на канву (TextOut()) - все тихо-спокойно!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: проект ест ресурсы процессора?

Сообщение olegy123 » 12.01.2018 23:18:52

ulimit устарела
http://ru.manpages.org/setrlimit/2
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux: проект ест ресурсы процессора?

Сообщение Владимир » 12.01.2018 23:31:22

zoltanleo писал(а):Чудак-человек. Ну сделайте вывод неск. потоков без БД, как например

На чудака не обижаюсь. Но, если элементарная операция жрет ЦП и память - это не правильно!
И не хочу изгаляться с потоками и проч. Это явный баг Лазаруса под Linux.

Добавлено спустя 13 минут 52 секунды:
zoltanleo писал(а):да помониторьте, течет ли память. Если не течет, значит от TTimer'а придется отказаться

А чего только от TTimer отказаться? Может, на asm перейти и не париться?

Добавлено спустя 12 минут 59 секунд:
olegy123 писал(а):ulimit устарела

Да ладно. Спасибо, что вьехали в тему. Не думаю, что разработчики Лазаруса тестировали такие выводы в течение десятков часов.
Под Linux - это явный баг (как мне кажется). Может, напишете в багтрекер?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: проект ест ресурсы процессора?

Сообщение olegy123 » 13.01.2018 00:00:53

Это не баг fpc - это особенности работы с Linux, менеджера памяти его называют ленивым (Lazy),
возможно чтобы выделить память он просто метит в новом месте.. Зачем разбираться какие page уже чистые, какие нужно дефрагментировать.. Да зачем оно нужно, когда проще отрезать кусок где свободно.
https://unix.stackexchange.com/question ... virt-memor

Добавлено спустя 29 минут 43 секунды:
https://stackoverflow.com/questions/864 ... ators-lazy
On Linux, malloc requests memory with sbrk() or mmap() - either way, your address space is expanded immediately, but Linux does not assign actual pages of physical memory until the first write to the page in question. You can see the address space expansion in the VIRT column, while the actual, physical memory usage in RES.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux: проект ест ресурсы процессора?

Сообщение Mirage » 13.01.2018 00:46:51

olegy123 писал(а):Можно, TTimer - это возможность реализовать многопоточное решение


Разве TTimer в LCL поток создает? А зачем?

По теме - вполне возможно, что в LCL утекают ресурсы. Если создать баг с компактным примером, то поправят.
Можно strace какой-нибудь натравить во время загрузки ЦП, чтобы понять чего оно там делает и его вывод приложить.

По памяти еще есть смысл проверить растет ли GetHeapStatus().TotalAllocated, хотя скорее всего утекает вне хипа.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Linux: проект ест ресурсы процессора?

Сообщение pupsik » 13.01.2018 04:19:12

Это явный баг Лазаруса под Linux
а почему так кардинально? Баг интерпретируется и под кедами, и под гномом? И в разных дистах? И там стоит то что поддерживается лазарем (gtk-2, qt-4)?
Если уж писать в баг трекер. То, как бы, слова: Линукс, баг = не достаточно.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 23

Рейтинг@Mail.ru