여기 당신을 위해, 가능성이 가장 쉬운 솔루션을 eprof을 사용하는 방법은 다음과 같습니다
먼저 당신은 거기 대부분의 응용 프로그램처럼, 그것을 시작해야합니다
23> eprof:start().
{ok,<0.95.0>}
Eprof 두 프로파일 모드를 지원합니다. 그것을 호출하고 특정 기능을 프로파일 링하도록 요청할 수 있지만, 다른 프로세스가 모든 기능을 망칠 것이기 때문에 사용할 수 없습니다. 우리는 프로파일 링을 수동으로 시작해야하고 멈출시기를 알려야합니다 (이것이 쉬운 스크립트가없는 이유입니다).
이것은 eprof가 쉘에서 실행되고 생성되는 모든 것을 프로파일하도록 지시합니다. 새로운 프로세스가 여기에 포함될 것입니다.
25> trade_calls:main_ab().
Spawned Carl: <0.99.0>
Spawned Jim: <0.101.0>
<0.100.0>
Jim: asking user <0.99.0> for a trade
Carl: <0.101.0> asked for a trade negotiation
Carl: accepting negotiation
Jim: starting negotiation
... <snip> ...
우리는 이제 기능 실행이 완료되면 프로파일 링을 중지 eprof을 알 수 있습니다 : 나는 몇 초 동안 서로 통신하는 약 4 프로세스를 생성합니다 내가 가진 어떤 임의의 멀티 기능을 실행합니다.
26> eprof:stop_profiling().
profiling_stopped
그리고 로그가 필요합니다. Eprof는 기본적으로 화면에 인쇄합니다. eprof:log(File)
으로 파일에 기록하도록 요청할 수도 있습니다. 그런 다음 결과를 분석하도록 말할 수 있습니다. 우리는 옵션 total
(더 많은 옵션에 대한 manual 참조) 단일 테이블에 모든 프로세스의 실행 시간을 축소하도록 지시 :
27> eprof:analyze(total).
FUNCTION CALLS % TIME [uS/CALLS]
-------- ----- --- ---- [----------]
io:o_request/3 46 0.00 0 [ 0.00]
io:columns/0 2 0.00 0 [ 0.00]
io:columns/1 2 0.00 0 [ 0.00]
io:format/1 4 0.00 0 [ 0.00]
io:format/2 46 0.00 0 [ 0.00]
io:request/2 48 0.00 0 [ 0.00]
...
erlang:atom_to_list/1 5 0.00 0 [ 0.00]
io:format/3 46 16.67 1000 [ 21.74]
erl_eval:bindings/1 4 16.67 1000 [ 250.00]
dict:store_bkt_val/3 400 16.67 1000 [ 2.50]
dict:store/3 114 50.00 3000 [ 26.32]
그리고 당신은 시간 (50 %)의 대부분이 소비되는 것을 볼 수 있습니다 in dict : store/3. 결과를 출력하는 데 16.67 %가 사용되며, erl_eval이 16.67 %를 차지합니다 (이 때문에 쉘에서 짧은 함수를 실행하면 구문 분석이 실행되는 것보다 길어집니다).
그런 다음 거기에서 시작할 수 있습니다. Erlang으로 런타임을 프로파일 링하는 기본 사항입니다. 주의해서 처리하면 eprof는 프로덕션 시스템이나 너무 오래 실행되는 기능에 상당한로드가 될 수 있습니다. 특히 프로덕션 시스템에서.결과적으로이 https://raw.github.com/virtan/eep/master/doc/sshot1.png 같은 https://github.com/virtan/eep
당신은 얻을 것이다 뭔가 :
ungivens의 몇 가지 있습니다 : 이것을인가 생산 시스템? 'eprof' 및 * 특히 *'fprof'는 실행 중에 성능이 저하됩니다. 둘 다 새로 산란 처리를 따라갈 수 있습니다. 그러나 네트워크 왕복과 같은 다른 것을 측정하고 싶을 수도 있습니다! 가장 쉬운 방법은 측정 할 함수 주위에'timer : tc' 호출을 삽입하는 것입니다. 또는'erlang : now()'를 가져 와서 다른 프로세스로 보내면 측정 작업을 수행 할 수 있습니다. –
페이지에서 eprof 스크립트 (또는 연습)가 더 낮습니다. :) –