![시스템 서비스와 관련하여 타임스탬프 단조성은 무엇을 의미합니까?](https://linux55.com/image/136307/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80%20%EA%B4%80%EB%A0%A8%ED%95%98%EC%97%AC%20%ED%83%80%EC%9E%84%EC%8A%A4%ED%83%AC%ED%94%84%20%EB%8B%A8%EC%A1%B0%EC%84%B1%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EC%9D%98%EB%AF%B8%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
다음 명령을 실행할 때
systemctl show --all tomcat
"ActiveEnterTimestampMonotonic"과 같은 속성을 포함하여 많은 속성을 얻습니다. 이 속성의 값은 "14786979371795"와 같이 매우 큽니다. 이는 서비스가 활성화된 이후의 에포크 이후의 밀리초 수를 나타내기에는 너무 큰 것 같습니다. 이 또한 서비스가 활성화된 이후 나노초만큼 작은 것으로 보입니다. 그래서 그것은 무엇입니까? "타임스탬프 단조성"이란 무엇입니까?
답변1
ㅏfreedesktop.org의 systemd D-Bus ABI에 대한 설명타임스탬프는 다음과 같이 설명됩니다.
InactiveExitTimestamp,InactiveExitTimestampMonotonic,ActiveEnterTimestamp,ActiveEnterTimestampMonotonic,ActiveExitTimestamp,ActiveExitTimestampMonotonic,InactiveEnterTimestamp,InactiveEnterTimestampMonotonic장치가 마지막으로 비활성 상태로 유지되거나, 활성 상태로 전환되거나, 활성 상태로 전환되거나, 비활성 상태로 들어간 시간의 CLOCK_REALTIME 및 CLOCK_MONOTONIC 64비트 usec 타임스탬프를 포함합니다. 단위 변환 시점은 다음과 같습니다.비활성/실패→활성화,활성화→활성,활성→비활성화,마침내비활성화 → 비활성화/실패. 이러한 변환이 이번 부팅에 기록되지 않은 경우 해당 필드는 0입니다.
조금 숨겨져 있지만 가운데에는 마이크로초(μs)를 의미하는 "usec timestamp"라고 적혀 있습니다.
clock_gettime()
systemd는 여러 대체 "시계" 중 하나에서 시간을 얻기 위한 시스템 API 기능을 제공하는 Linux에서 타임스탬프를 얻습니다 . 문서에 나와 있듯이 a CLOCK_REALTIME
및 이라는 항목이 필요합니다 CLOCK_MONOTONIC
.
이 기능에 대한 매뉴얼말했다 (강조) :
CLOCK_MONOTONIC
단조로운 시간을 나타내는 설정 불가능한 시계불특정 시작점 때문에. 이 시계는 시스템 시간의 불연속적인 점프(예: 시스템 관리자가 시계를 수동으로 변경하는 경우)의 영향을 받지 않지만 adjtime(3) 및 NTP에 의해 수행되는 증분 조정의 영향을 받습니다.
내 시스템에서는 이러한 값이 시스템 부팅 시간의 시작 지점에 해당하는 것처럼 보이지만 이에 의존해서는 안 됩니다. (Linux 매뉴얼에는 CLOCK_BOOTTIME
.와 .의 차이점 도 설명되어 있습니다 CLOCK_MONOTONIC
.)
이 *TimestampMonotonic
값을 사용하여 간격을 계산하거나 날짜와 시간이 필요한 경우 실시간 타임스탬프를 계산할 수 있습니다. 타이머 단위가 있는 경우 상대 시간 설정은 단조로운 시간 단위입니다.
실증적 실험으로 특정 서비스를 다시 시작한 다음 타임스탬프를 새로 고쳤습니다. 내가 얻는 가치는 다음과 같습니다.
ActiveEnterTimestamp=Tue 2018-07-03 18:37:31 EEST
ActiveEnterTimestampMonotonic=14341647533587
그리고
ActiveEnterTimestamp=Tue 2018-07-03 19:03:04 EEST
ActiveEnterTimestampMonotonic=14343180833503
차이는 14343180833503 - 14341647533587
약 1533299916
25.5분(마이크로초) 간격입니다.
답변2
솔라리스는 28년 동안 기능해 왔으며 gethrtime()
출시 이후 단조로운 나노초를 반환해 왔습니다.
귀하의 숫자는 4시간의 가동 시간과 일치하며 systemd 작성자가 Solaris를 조사했기 때문에 부팅 후 나노초가 걸릴 가능성이 높습니다.
확인하다:
14786979371795~로 나누다10억밝혀지다14786.979371795두번째
14786.979371795초로 나눈60몇 초 만에 결과246.4496561965분
246.4496561965분은4.1074942699시간
피드백 결과 172일의 가동 시간이 발생하므로 이 숫자는 다음의 단조 시계를 기반으로 하는 경우 마지막 부팅 이후의 마이크로초 수임이 분명합니다.clock_gettime()
참고: 부호 있는 64비트 숫자를 사용하여 나노초를 계산하는 단조 카운터는 최대 1696년의 가동 시간을 달성할 수 있습니다.