스크립트 프로파일러

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

스크립트 프로파일러개발자 콘솔 내의 도구로, 모든 실행 중인 스크립트의 프로파일링 세션을 기록하고 사용자 지정 기록 및 표시 설정으로 CPU 시간 비용을 볼 수 있습니다. 이 도구는 Luau 함수, 메서드 호출 및 속성 접근을 포함한 모든 유형의 함수 호출을 기록할 수 있습니다. 이 도구는 CPU 자원을 가장 많이 사용하고 성능을 저하시킨 스크립트를 식별하는 데 유용합니다.

프로파일링 세션 기록

기록하기 전에 다음에서 기록 환경을 선택해야 합니다.

  • 클라이언트 (기본값) — LocalScriptsScripts와 함께 RunContextClient로 설정된 클라이언트 측 스크립트를 기록합니다.
  • 서버RunContextServer 또는 Legacy로 설정된 Scripts과 함께 서버 측 스크립트를 기록합니다. 스크립트 프로파일러는 각 세션의 끝에서 수집된 모든 서버 측 데이터를 지웁니다.

다음 기록 옵션도 설정할 수 있습니다:

동작옵션기본값설명
빈도1초에 1000회 (1 KHz)
1초에 10,000회 (10 KHz)
1 KHz10 KHz 빈도는 더 높은 정밀도를 가지며, 스크립트 프로파일러는 선택한 빈도보다 더 자주 실행되는 API 호출을 포착하지 못할 수 있지만, 성능 비용이 더 높습니다.
세션 길이1분
5분
10분
수동
수동수동 옵션은 사용자가 수동으로 기록을 중지해야 합니다.
실시간 폴링 동작켜기
끄기
끄기이 동작은 프로파일링 세션 동안 매 초마다 프로파일링 데이터를 폴링하고 새로 고칩니다.

새로운 프로파일링 세션을 기록하려면:

  1. 개발자 콘솔을 엽니다.

  2. 도구 드롭다운을 확장하여 스크립트 프로파일러를 선택합니다.

    스크립트 프로파일러 옵션이 강조된 모든 개발자 콘솔 도구의 드롭다운 메뉴.
  3. 클라이언트-서버 드롭다운을 확장하여 클라이언트 또는 서버를 선택합니다.

    선택을 위한 클라이언트와 서버 옵션이 있는 드롭다운 메뉴.
  4. (선택 사항) 실시간 체크박스를 체크하여 실시간 폴링 동작을 활성화합니다.

  5. (선택 사항) 기본값을 사용하지 않으려면 주파수시간을 선택하여 기록 주파수와 세션 기간을 선택합니다.

  6. 시작을 클릭하여 프로파일링 세션을 시작합니다. 지속 시간을 설정한 경우, 스크립트 프로파일러는 세션에서 남은 시간을 보여주는 카운트다운 타이머를 표시합니다.

  7. 중지를 클릭하거나 기록이 끝날 때까지 기다려 프로파일링 데이터를 표시합니다.

프로파일링 데이터 읽기

세션이 종료된 후, 스크립트 프로파일러는 각 함수 호출의 CPU 시간 비용을 나타내는 테이블을 생성합니다. 이 테이블은 함수 호출을 소비된 시간 기준으로 정렬하며, 특정 함수 이름으로 검색할 수 있게 합니다. 다음 두 가지 보기를 제공합니다.

  • 호출 그래프 (기본값): 프레임 작업에 따라 함수 호출을 트리 구조로 분류하고 표시합니다. 이 보기에서는 각 작업 카테고리를 같은 루트 아래의 노드로 표시하며, 함수를 보려면 확장할 수 있습니다. 트리의 어떤 노드 위에 마우스를 올리면 파일 및 라인 정보를 확인할 수 있습니다. 예를 들어, **Stepped/CameraInput/<anonymous>**는 Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125를 보여줄 수 있습니다. 프로파일링 세션의 호출 그래프 보기 예제.
  • 함수: 모든 함수를 나열하되, 작업 기준으로 분류하지 않습니다. 프로파일링 세션의 함수 보기 예제.

디버깅 요구 사항에 맞게 선택할 수 있는 다음 표시 옵션도 있습니다:

이름옵션기본값설명
단위밀리초 (ms)
퍼센트 (%)
ms각 API 호출에 소비된 시간을 밀리초 또는 전체 기록 세션의 백분율로 표시합니다.
평균끄기
1초
1분
5분
10분
끄기선택한 값에 따라 각 API 호출에 소비된 평균 시간을 계산합니다. 세션 길이보다 긴 옵션을 선택하면, 스크립트 프로파일러는 평균을 계산하기 위해 세션 길이를 추정합니다. 예를 들어, 1분 세션에 대해 5분 옵션을 선택하면 5분 동안 코드를 실행했을 때 예상되는 평균 값을 확인할 수 있습니다.

프로파일링 데이터 내보내기

스크립트 프로파일러는 기록된 프로파일링 데이터를 JSON 파일로 내보낼 수 있습니다. 프로파일링 세션이 끝난 후 기록된 데이터를 내보내려면:

  1. 스크립트 프로파일러 창에서 내보내기를 클릭합니다.

  2. 내보내기 창에서 내보낼 프로파일링 세션을 선택합니다. 원하는 경우 기본 파일 이름을 변경하여 사용자 지정 이름을 설정할 수 있습니다.

  3. 내보내기를 클릭하여 JSON 파일을 저장합니다.

    내보내기 창 예제.

내보낸 JSON 파일에는 다음과 같은 필드가 포함됩니다:

  • 버전: 버전 번호.
  • 세션 시작 시간: 세션 시작 시간을 기록하는 밀리초 단위의 타임스탬프.
  • 세션 종료 시간: 세션 종료 시간을 기록하는 밀리초 단위의 타임스탬프.
  • 카테고리: 프로파일링 세션에서 기록된 프레임 작업 카테고리의 배열. 각 항목에는:
    • 이름: 각 프레임 작업 카테고리의 이름.
    • 노드 ID: 작업 카테고리(노드)의 고유 식별자입니다. Nodes 배열에서 1 기반 인덱스입니다. 예를 들어, NodeId123인 노드를 찾으려면 Nodes의 123번째 요소를 검색하면 됩니다.
  • 노드: 프로파일링 세션에서 기록된 노드의 배열. 각 항목에는:
    • 총 시간: 노드가 CPU 시간에 소모한 시간(마이크로초).
    • 함수 ID: 함수의 고유 식별자 배열.
    • 노드 ID: 노드 ID 배열.
  • 함수: 프로파일링 세션에서 기록된 함수의 배열.
    • 총 시간: 함수가 CPU 시간에 소모한 시간(마이크로초).
    • 이름: 함수 이름(사용 가능한 경우).
    • 출처: 함수 출처(사용 가능한 경우).
    • 라인: 함수의 라인 번호(사용 가능한 경우).
    • 플래그: 특정 함수 실행 환경을 나타내는 비트 필드입니다. 현재 다음 값을 가질 수 있습니다:
      • 0: 0번째 비트는 네이티브 코드 생성 실행을 위한 IsNative를 나타냅니다.
      • 1: 1번째 비트는 플러그인으로 실행되는 IsPlugin을 나타냅니다.
내보낸 프로파일링 데이터 예제

{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"병렬 Luau","NodeId":4},
{"Name":"하트비트","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"스크립트","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.