systemd 데몬으로 실행되는 프로세스의 CPU 사용량이 높습니다.

systemd 데몬으로 실행되는 프로세스의 CPU 사용량이 높습니다.

programsystemd를 통해 백그라운드 프로세스로 실행할 수 있는 C++ 컴파일 실행 파일이 있습니다 .

명령줄을 통해 일반 프로세스로 실행할 수도 있습니다(주로 디버깅에 사용됨).

이 프로세스는 다른 애플리케이션과 외부 장치 간에 정기적인 IO 작업을 수행합니다. 장치 통신은 TCP/IP 이더넷을 통해 발생하는 반면 애플리케이션 통신은 모두 프로세스 간 통신입니다.

문제는 응용 프로그램이 독립 실행형 실행 파일로 실행될 때 약 0.7% - 1.3%의 CPU 사용량으로 실행된다는 것입니다.

동일한 애플리케이션이 시스템 백그라운드 프로세스로 실행되면 CPU% 사용량이 CPUQuota구성에서 허용되는 최대치 수준으로 실행됩니다. 이 경우에는 5%로 설정했습니다.

왜 이런거야? 이 문제를 일으키는 시스템에서 무슨 일이 일어나고 있습니까? 코드 관점에서 애플리케이션으로 실행하는 것과 데몬으로 실행하는 것의 유일한 차이점은 데몬으로 실행될 때 전송된 간격에 따라 하트비트를 보낸다는 것입니다.

답변1

다음 조정 사항을 적용하십시오.

1. 다음과 같이 I/O 스케줄러를 mq-deadline으로 변경합니다.

다음을 확인하세요.mq 마감일 스케줄러다음 항목에 항목을 추가하여 시작 시 로드됩니다 /etc/modules-load.d/modules.conf.

echo mq-deadline >> /etc/modules-load.d/modules.conf

/etc/default/grub그런 다음 다중 대기열 최종 기한 스케줄러가 활성화되어 있는지 편집 하고 확인합니다.

GRUB_CMDLINE_LINUX_DEFAULT="scsi_mod.use_blk_mq=1 elevator=mq-deadline"

완료되면 다음을 발행하십시오.

sudo update-grub

그런 다음 재부팅하십시오. 참고하세요단일 대기열 스케줄러는 Linux 5.x에서 제거되었습니다..

이것의 목표는 CFQ(Completely Fair Queuing)가 재정의되도록 하는 것입니다. 이것은 Linux 배포판의 기본 스케줄러일 수 있지만 최근에는OpenSUSE와 같은다중 대기열 마감 스케줄러를 기본값으로 설정하기 시작했습니다. 다중 대기열 최종 기한 스케줄러의 주요 장점은 CPU 오버헤드가 매우 낮다는 것입니다.

2. 가장 중요한 것:자동 그룹 기능(기본적으로 활성화되어 있음)을 비활성화하고 sched_migration_cost 변수의 값을 조정합니다 /etc/sysctl.conf.

다음 줄을 입력하세요 /etc/sysctl.conf.

kernel.sched_autogroup_enabled=0
kernel.sched_migration_cost_ns = 5000000

그런 다음 실행 sysctl -p하고 재부팅하십시오.

프로덕션 환경에서 비슷한 문제가 발생했는데 위의 조정으로 해결되었습니다. 다양한 옵션에 대한 설명이것스레드는 매우 유용했습니다.Proxmox와 비슷한 사례.

관련 정보