Выпуск ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти earlyoom 1.4

ПослС восьми мСсяцСв Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ процСсса earlyoom 1.4, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСриодичСски провСряСт объСм доступной памяти (MemAvailable, SwapFree) ΠΈ пытаСтся Π½Π° Ρ€Π°Π½Π½Π΅ΠΉ стадии ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° возникновСния Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ MIT.

Если ΠΎΠ±ΡŠΡ‘ΠΌ доступной памяти мСньшС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ значСния, Ρ‚ΠΎ earlyoom ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ SIGTERM ΠΈΠ»ΠΈ SIGKILL) Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ процСсса, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ самоС большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ /proc/*/oom_score), Π½Π΅ доводя состояниС систСмы Π΄ΠΎ очистки систСмных Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΈ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ своппинга (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ OOM (Out Of Memory) Π² ядрС срабатываСт ΠΊΠΎΠ³Π΄Π° состояниС Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти ΡƒΠΆΠ΅ достигло ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ систСма ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ).

Earlyoom ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹Ρ… процСссах Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ notify-send), Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния ΠΏΡ€Π°Π²ΠΈΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° процСссов, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (опция «—prefer») ΠΈΠ»ΠΈ остановки ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ (опция «—avoid»).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния Π² Π½ΠΎΠ²ΠΎΠΌ выпускС:

  • Π—Π° счёт ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² процСссов Π½Π° 50% ускорСна Π»ΠΎΠ³ΠΈΠΊΠ° Π²Ρ‹Π±ΠΎΡ€Π° процСссов для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ;
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³Π΅ UID Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌΠΎΠ³ΠΎ процСсса, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ PID ΠΈ ΠΈΠΌΠ΅Π½ΠΈ процСсса;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° подсвСтка ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π° свСтло сСрым Ρ†Π²Π΅Ρ‚ΠΎΠΌ;
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° чистка ΠΊΠΎΠ΄Π°;
  • По возмоТности использовано объявлСниС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… для Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° настройка PATH_LEN для Π·Π°ΠΌΠ΅Π½Ρ‹ Π²ΡˆΠΈΡ‚ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ΄ значСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΡ„Π΅Ρ€Π°;
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ запуск cppcheck ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ «make bench»;
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ Π½Π°Π±ΠΎΡ€ тСстов (make test);
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ сброс ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ root Π² unit-Ρ„Π°ΠΉΠ»Π΅ systemd earlyoom.service. Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠΌΠ°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ GUI ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ GUI ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ прСдлагаСтся Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ root ΠΏΡ€Π°Π²Π°, раскоммСнтировав «DynamicUser=true». ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ root Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСвозмоТности получСния свСдСний ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ памяти ΠΏΡ€ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ /proc Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ hidepid=1 ΠΈΠ»ΠΈ hidepid=2.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru