Lewati ke isi

Pemecahan Masalah / Timeout Eksekusi Fungsi

Timeout eksekusi fungsi dapat terjadi karena berbagai kemungkinan, sehingga perlu diidentifikasi berdasarkan situasi yang berbeda.

1. Menjalankan Fungsi yang Terlalu Lama di Editor UI DataFlux Func

Untuk melindungi sistem, saat menjalankan fungsi di editor DataFlux Func, sistem akan mengabaikan konfigurasi timeout, dan batas waktu yang ditetapkan adalah 60 detik.

Ketika waktu eksekusi fungsi melebihi batas waktu, sistem akan langsung menghentikan (Kill) proses dan melempar error seperti berikut:

Text Only
1
2
3
4
Traceback (most recent call last **IN USER SCRIPT**):
  File "demo__test_timeout", line 5, in test_timeout
    time.sleep(100)
worker.tasks.TaskTimeout: Task execution has taken too much time and has been killed by force
Kemungkinan Penyebab Solusi
Fungsi yang dieksekusi berjalan melebihi batas 60 detik Eksekusi fungsi di editor terutama untuk pengembangan/debugging, sebaiknya gunakan dataset dan jumlah permintaan yang lebih kecil
Jangan langsung menjalankan tugas berdurasi panjang secara penuh

2. Proses worker di-kill karena eksekusi fungsi terlalu lama

Untuk melindungi sistem, DataFlux Func membatasi waktu maksimum eksekusi fungsi dan tidak mengizinkannya berjalan tanpa batas. Setelah melebihi batas waktu tertentu, proses eksekusi akan langsung di-kill.

Secara spesifik, gejalanya adalah:

  1. Dalam log eksekusi tugas, teramati adanya error yang mengandung TaskTimeout, seperti:
Text Only
1
2
3
4
Traceback (most recent call last **IN USER SCRIPT**):
  File "demo__test_timeout", line 5, in test_timeout
    time.sleep(100)
worker.tasks.TaskTimeout: Task execution has taken too much time and has been killed by force
  1. Memanggil API Fungsi mengembalikan kode status 599, dengan data respons yang mengandung EFuncTimeout (biasanya juga berisi informasi TaskTimeout) seperti berikut:
JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "ok"     : false,
  "error"  : 599.2,
  "status" : 599,
  "reason" : "EFuncTimeout",
  "message": "Func task timeout",
  "detail": {
    "name"               : "Func.Runner",
    "id"                 : "task-xxxxx",
    "triggerTime"        : 1755596408.972,
    "startTime"          : 1755596408.974,
    "endTime"            : 1755596411.979,
    "status"             : "timeout",
    "exceptionType"      : "TaskTimeout",
    "exception"          : "TaskTimeout('Task execution has taken too much time and has been killed by force')",
    "exceptionFrom"      : "worker",
    "originExceptionType": "TaskTimeout",
    "originException"    : "TaskTimeout('Task execution has taken too much time and has been killed by force')"
  },
  "reqDump": {
    "method": "GET",
    "url"   : "http://localdev:8089/api/v1/func-api/demo__test_timeout.test_timeout.xxxxx/s"
  },
  "traceId"   : "TRACE-XXXXX",
  "clientTime": null,
  "reqTime"   : "2025-08-19T09:40:08.967Z",
  "respTime"  : "2025-08-19T09:40:12.140Z",
  "reqCost"   : 3173
}

Di sini, field reqCost adalah waktu yang berlalu sejak fungsi mulai dieksekusi hingga di-kill (dalam milidetik).

Kemungkinan penyebab dan solusi:

Kemungkinan Penyebab Solusi
Fungsi yang dieksekusi tidak menentukan parameter timeout, tetapi fungsi berjalan melebihi batas waktu default Hubungi pengembang fungsi untuk memeriksa kesalahan, termasuk namun tidak terbatas pada:
Parameter timeout disetel terlalu singkat
Respons sistem eksternal yang dipanggil dalam fungsi terlalu lambat
Fungsi yang dieksekusi menentukan parameter timeout (detik), dan fungsi berjalan melebihi batas waktu Sama seperti di atas

Batas waktu fungsi defaultnya 30 detik, dan pengaturan maksimalnya 3600 detik

X. Dokumentasi Referensi