All Products
Search
Document Center

SchedulerX:FAQ tentang manajemen pekerjaan

Last Updated:Jul 02, 2025

Topik ini menjawab beberapa pertanyaan umum (FAQ) terkait manajemen pekerjaan di SchedulerX.

Apa yang harus saya lakukan jika aplikasi Spring tidak dapat menemukan beans?

  1. Di halaman Manajemen Aplikasi pada konsol SchedulerX, temukan aplikasi Spring dan klik nomor di kolom Total Jumlah Instans. Pastikan mode boot adalah Spring atau Spring Boot.

  2. Pastikan bean disuntikkan ke dalam JobProcessor di kode aplikasi Spring. Sebagai contoh, tambahkan anotasi @Component.

  3. Jika file pom.xml berisi dependensi spring-boot-devtools, hapus dependensi tersebut.

  4. Jika JobProcessor atau metode proses mencakup anotasi pemrograman berorientasi aspek (AOP), tingkatkan agen SchedulerX ke versi terbaru. Versi sebelumnya dari agen SchedulerX tidak mendukung anotasi AOP.

  5. Periksa apakah beans diproksi oleh aspek lain. Tambahkan titik henti pada kelas DefaultListableBeanFactory. Variabel anggota beanDefinitionNames adalah beans yang terdaftar di Spring. Periksa apakah beans ini diproksi oleh aspek lain. Sebagai contoh, beans mungkin diproksi karena pustaka pihak ketiga yang tidak valid diimpor secara tidak langsung oleh pengguna. Jika beans diproksi oleh aspek lain, hapus aspek tersebut.

1

Jika masalah tetap ada, debug ThreadContainer.start. Jika kesalahan class.forName terjadi tetapi kelas tersebut ada, penyebabnya kemungkinan kerangka kerja aplikasi Spring menggunakan class loader yang berbeda dari class loader agen SchedulerXWorker. Dalam kasus ini, modifikasi SchedulerxWorker.setClassLoader untuk menyelesaikan masalah ini.

Apa yang harus saya lakukan jika pekerjaan gagal dan pesan kesalahan "Tidak dapat membuat field private" dikembalikan?

MapReduce menggunakan framework serialisasi dan deserialisasi. Untuk Java 9 dan versi lebih baru, Anda harus mengaktifkan fitur refleksi secara manual untuk mengakses variabel privat. Tambahkan konfigurasi berikut ke parameter Java Virtual Machine (JVM):

--add-opens java.base/java.lang=ALL-UNNAMED

Apa yang harus saya lakukan jika pekerjaan gagal dan pesan kesalahan "submit jobInstanceId to worker timeout" dikembalikan?

Jika masalah ini terjadi selama pelepasan aplikasi atau sesekali, Anda dapat mengabaikannya.

Jika masalah ini terus berlanjut dan parameter workAddr dalam laporan kesalahan sama, koneksi persisten antara server dan agen terputus. Restart node pekerja atau tingkatkan agen SchedulerX ke versi terbaru. Koneksi persisten akan pulih secara otomatis.

Apa yang harus saya lakukan jika pekerjaan gagal dan pesan kesalahan "used space beyond 90.0%!" dikembalikan?

Disk penuh. Bersihkan ruang disk dari instans Elastic Compute Service (ECS) atau kontainer.

Apa yang harus saya lakukan jika pekerjaan gagal dan pesan kesalahan "ClassNotFoundException" dikembalikan?

Pesan kesalahan ini menunjukkan bahwa pekerja yang menjalankan pekerjaan tidak memiliki kelas ini. Pastikan nilai parameter Nama Kelas Processor yang dikonfigurasikan untuk pekerjaan Java adalah jalur lengkap dari kelas.

Jika nama kelas JobProcessor benar, kelas tersebut tidak ada di pekerja. Penyebab umumnya adalah paket yang digunakan salah atau aplikasi terhubung ke pekerja lain. Masuk ke pekerja dan gunakan dekompilasi Java untuk melihat detailnya.

Apa yang harus saya lakukan jika pekerjaan gagal dan pesan kesalahan "jobInstance=xxx don't update progress more than 60s" dikembalikan?

Jika pekerja yang menjalankan pekerjaan gagal berfungsi normal dan tidak memperbarui kemajuan selama 60 detik, pekerja tersebut dipaksa dihentikan oleh server. Jika masalah disebabkan oleh pekerja atau pekerja tidak ada, Anda dapat mengabaikan masalah ini.

Apa yang harus saya lakukan jika pekerjaan gagal dan tidak ada pesan kesalahan yang dikembalikan?

Issue

Pekerjaan gagal dijalankan tanpa pesan kesalahan.

Possible cause

Penyebab mungkin termasuk kegagalan pekerja atau kegagalan logika bisnis.

Solution

  • Di halaman Daftar Eksekusi, klik tab Task instance List. Temukan pekerjaan yang ingin dikelola dan klik Details di kolom Operasi untuk membuka halaman Task instance details.

    Jika tidak ada detail tugas tersedia, pekerjaan tersebut adalah pekerjaan sederhana. Nilai parameter WorkAddr di tab Informasi Dasar menunjukkan pekerja yang menjalankan pekerjaan.

  • Masuk ke pekerja yang menjalankan pekerjaan dan buka log ~/logs/schedulerx/worker.log.

    Jalankan perintah grep <ID Instans> worker.log untuk melihat log terkait instans. Jika terjadi kesalahan, lihat penyebab stack dari kesalahan tersebut.

  • Jika deskripsi kesalahan kosong, masalah ini disebabkan oleh kegagalan logika bisnis tanpa pesan kesalahan. Lakukan pemecahan masalah logika bisnis.

  • Jika deskripsi kesalahan menunjukkan pengecualian kerangka kerja, bergabunglah dengan grup DingTalk 23103656 untuk dukungan teknis.

Bagaimana cara mengidentifikasi penyebab kegagalan pekerjaan?

  • Jika pengecualian dilaporkan untuk pekerjaan mandiri, buka halaman Daftar Eksekusi dan klik tab Task instance List. Temukan pekerjaan dan klik Details di kolom Operasi untuk melihat pesan kesalahan.

  • Jika tidak ada pengecualian dilaporkan atau pekerjaan tersebut adalah pekerjaan terdistribusi, gunakan Layanan Log untuk pemecahan masalah jika Anda menggunakan Edisi Profesional SchedulerX.

  • Di Edisi Dasar, masuk ke node pekerja dan lihat log SchedulerX serta log bisnis untuk pemecahan masalah.

Apa yang harus saya lakukan jika pekerjaan macet saat dijalankan?

Issue

Pekerjaan tetap dalam status berjalan dan tidak dapat diselesaikan.

Possible cause

  • Masalah bisnis mungkin terjadi.

  • Masalah SchedulerX mungkin terjadi.

Solution

Jika masalah bisnis terjadi, lakukan langkah-langkah berikut. Jika jenis masalah lain terjadi, bergabunglah dengan grup DingTalk 23103656 untuk dukungan teknis.

  • SchedulerX Edisi Profesional: Gunakan fitur ThreadDump di konsol untuk menanyakan stack dan menyelesaikan masalah. Fitur ini tersedia di agen versi 1.4.2 atau lebih baru.

  • SchedulerX Edisi Dasar: Masuk ke node pekerja tempat pekerjaan macet dan jalankan perintah jstack untuk melihat stack.

    jstack <pid> | grep <ID Instans> -A 20

    6

Bagaimana cara memecahkan masalah pekerjaan yang lambat?

Gunakan Edisi Profesional dan aktifkan fitur Analisis Tracing. Untuk informasi lebih lanjut, lihat Integrasi Analisis Tracing.

Apa yang harus saya lakukan jika jumlah instans yang menjalankan pekerjaan mencapai batas atas?

Issue

Pesan kesalahan Jumlah instans pekerjaan konkuren mencapai batas atas. Coba lagi nanti. ditampilkan setelah mengklik Run once di halaman Manajemen Tugas.

Possible cause

  • Pekerjaan sudah berjalan di instans pekerjaan.

  • Jumlah instans pekerjaan yang menjalankan pekerjaan telah mencapai nilai parameter Konkurensi Instans yang dikonfigurasikan untuk pekerjaan tersebut.

Solution

Jika nilai yang dikonfigurasikan untuk parameter Konkurensi Instans sudah tepat, Anda dapat mengabaikan masalah ini. Buka halaman Manajemen Tugas, temukan pekerjaan yang ingin dikelola, dan pilih more > Historical records di kolom Operasi untuk melihat instans pekerjaan yang sedang berjalan.

Jika nilai yang dikonfigurasikan untuk parameter Konkurensi Instans tidak tepat, buka halaman Manajemen Tugas, temukan pekerjaan yang diinginkan, dan klik Edit di kolom Operation. Tentukan parameter Instance concurrency di Konfigurasi Lanjutan.

Jika pekerjaan tidak selesai sesuai jadwal, apakah pekerjaan tersebut akan diantrekan untuk dijalankan lain kali atau tidak?

Nilai default parameter Konkurensi Instans adalah 1, yang menunjukkan bahwa pekerjaan hanya dijalankan pada satu instans pada satu waktu. Jika pelaksanaan pekerjaan memakan waktu lama dan tidak selesai sesuai jadwal, pekerjaan tersebut akan langsung dibuang pada waktu penjadwalan berikutnya dan tidak akan dijalankan atau diantrekan.

Jika nilai parameter Konkurensi Instans diatur ke 2, pelaksanaan pekerjaan yang tidak selesai sesuai jadwal dapat dilanjutkan lain kali. Ini menunjukkan bahwa hingga dua instans pekerjaan dapat menjalankan pekerjaan tersebut.

Bagaimana cara membuat pekerjaan satu kali?

SchedulerX 2.0 memungkinkan Anda membuat pekerjaan satu kali dengan mengatur parameter Jenis Waktu ke one_time. Tidak ada catatan eksekusi yang disimpan untuk pekerjaan satu kali.

Bagaimana cara melihat catatan historis pekerjaan satu kali setelah dijalankan?

Setelah pekerjaan satu kali dijalankan, pekerjaan tersebut secara otomatis dihapus dan tidak ada catatan historis yang disimpan. Ini mencegah akumulasi data. Jika Anda ingin menyimpan catatan historis, aktifkan Layanan Log untuk menyimpan log eksekusi semua pekerjaan dalam dua minggu terakhir untuk pemecahan masalah. Untuk informasi lebih lanjut, lihat Manajemen Aplikasi.

Bagaimana cara melakukan penjadwalan penundaan detik?

SchedulerX mendukung penjadwalan penundaan detik. Jika parameter Jenis Waktu pekerjaan diatur ke cron atau fix_rate, pekerjaan tersebut tidak mendukung penjadwalan penundaan detik. Atur Jenis Waktu ke second_delay untuk pekerjaan. Lalu, pekerjaan tersebut dijalankan pada interval penundaan setelah pelaksanaan terakhir.

Apa yang harus saya lakukan jika pekerjaan tidak dijadwalkan pada suatu titik waktu?

Jika pekerjaan mandiri tidak dijadwalkan pada suatu titik waktu, periksa apakah pekerja ada dalam daftar pekerja dan apakah semua pekerja sibuk. Jika tidak ada pekerja yang tersedia, periksa apakah tidak ada pekerja atau pekerja yang ada sibuk. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika sistem menampilkan pesan "tidak ada pekerja yang tersedia"? dan Apa yang harus saya lakukan jika semua pekerja sibuk?

Kami merekomendasikan agar Anda menghidupkan sakelar Alarm Tanpa Mesin Tersedia. Untuk informasi lebih lanjut, lihat Manajemen Pekerjaan.

Bagaimana cara mengatur periode timeout di SchedulerX?

SchedulerX memungkinkan Anda mengatur periode timeout untuk pekerjaan tetapi tidak untuk tugas. Anda dapat mengubah periode timeout di konsol. Untuk informasi lebih lanjut, lihat Manajemen Pekerjaan.

Mengapa pekerjaan masih dijalankan setelah instans dihentikan?

Issue

Pekerjaan masih dijalankan setelah instans dihentikan.

Possible cause

Setelah instans pekerjaan dihentikan, SchedulerX mengirimkan pesan Kill ke agen. Setelah menerima pesan Kill, agen berhenti mengirimkan dan menjalankan tugas yang belum dieksekusi, menghancurkan konteks instans, dan menghancurkan semua thread pool instans. Namun, tugas yang sedang dieksekusi tidak dihentikan, dan hanya thread yang sesuai yang diinterupsi. Oleh karena itu, tugas tersebut akan terus berjalan sampai selesai.

Solution

  • Dalam kebanyakan kasus, Anda dapat menunggu sampai tugas selesai dan tidak perlu menangani masalah ini.

  • Jika Anda ingin menghentikan semua pekerjaan yang sedang berjalan segera setelah Anda menghentikan instans, modifikasi logika pemrosesan tugas dan tambahkan status Interupsi ke thread saat ini.

Bagaimana cara mengatur konfigurasi lanjutan untuk manajemen pekerjaan?

Untuk informasi lebih lanjut, lihat Parameter Lanjutan untuk Manajemen Pekerjaan.

Apa yang harus saya lakukan jika semua pekerja sibuk?

Di halaman Manajemen Aplikasi, temukan aplikasi yang ingin dikelola dan klik Lihat Instans di kolom Operasi. Identifikasi pekerja dalam status Sibuk, dan arahkan pointer ke Busy untuk melihat metrik yang melebihi ambang batas.

Untuk mengonfigurasi ambang batas, buka halaman Application Management, temukan aplikasi, klik Edit di kolom Operasi, dan tentukan parameter terkait di panel Edit application grouping.

Jika pekerja sibuk karena beban melebihi ambang batas yang ditentukan, periksa apakah aplikasi diterapkan di kontainer Kubernetes. Jika Anda menerapkan aplikasi di kontainer Kubernetes, konfigurasikan parameter berikut. Jika tidak, pemanfaatan CPU yang dikumpulkan mungkin salah. Untuk informasi lebih lanjut, lihat Menghubungkan Aplikasi Spring Boot ke SchedulerX.

kunci

Deskripsi

Nilai

Versi awal

spring.schedulerx2.enableCgroupMetrics

Menentukan apakah akan menggunakan control groups (cgroups) untuk mengumpulkan metrik agen. Anda harus secara manual mengaktifkan fitur ini di lingkungan Kubernetes.

Nilai valid: true dan false. Nilai default: false.

1.2.2.2

spring.schedulerx2.cgroupPathPrefix

Menentukan jalur cgroup di kontainer.

Jalur default adalah /sys/fs/cgroup/cpu/. Jika jalur sudah ada, Anda tidak perlu mengonfigurasi parameter ini.

1.2.2.2

Bagaimana cara mengintegrasikan Analisis Tracing?

SchedulerX mendukung fitur analisis tracing ujung ke ujung. Untuk informasi lebih lanjut, lihat Integrasi Analisis Tracing.

Apa yang harus saya lakukan ketika pelaksanaan pekerjaan macet atau melambat selama pelepasan aplikasi?

Issue

Selama pelepasan aplikasi, pelaksanaan pekerjaan macet atau melambat.

Possible cause

Untuk pekerjaan terdistribusi, jika pekerja yang memproses tugas offline, SchedulerX mendistribusikan ulang tugas dan melakukan polling untuk mengidentifikasi pekerja online. Ini memperlambat seluruh proses.

Solution

Masalah ini dapat dioptimalkan jika Anda memperbarui agen ke versi 1.7.9 atau lebih baru.

Apa yang harus saya lakukan ketika sistem meminta saya memasukkan parameter instans setelah saya mengklik Jalankan sekali?

Ketika Anda mengklik Jalankan Sekali di kolom Operasi pekerjaan penjadwalan pada halaman Manajemen Tugas, pekerjaan dijalankan sekali. Bidang Instance Parameters di kotak dialog yang muncul bersifat opsional dan digunakan untuk pengujian.

Apakah kode mendapatkan parameter instans atau parameter pekerjaan ketika saya mengklik Jalankan Sekali dan memasukkan parameter instans?

Parameter instans berbeda dari parameter pekerjaan. Parameter yang diperoleh dalam kode ditentukan oleh logika bisnis Anda.

Bagaimana cara mendapatkan parameter pekerjaan atau parameter instans?

Contoh kode berikut memberikan contoh konfigurasi:

@Component
public class JavaDemoProcessor extends JavaProcessor {


    private static final Logger LOGGER = LoggerFactory.getLogger("schedulerxLog");


    @Override
    public ProcessResult process(JobContext jobContext) throws InterruptedException {

        LOGGER.info(JSON.toJSONString(jobContext));
        // Mendapatkan parameter pekerjaan.
        String jobParameters = jobContext.getJobParameters();
        // Mendapatkan parameter instans.
        String instanceParameters = jobContext.getInstanceParameters();
        LOGGER.info("Parameter pekerjaan:" + jobParameters);
        LOGGER.info("Parameter instans" + instanceParameters);
        return new ProcessResult(InstanceStatus.SUCCESS);
    }

}

Bagaimana cara mengizinkan kode mendapatkan parameter instans secara default jika saya menentukan parameter instans dan mendapatkan parameter pekerjaan jika saya tidak menentukan parameter instans?

Contoh kode berikut memberikan contoh konfigurasi:

@Component
public class JavaDemoProcessor extends JavaProcessor {

    private static final Logger LOGGER = LoggerFactory.getLogger("schedulerxLog");

    @Override
    public ProcessResult process(JobContext jobContext) throws InterruptedException {
        String params = null;
        if (StringUtils.isNotBlank(jobContext.getInstanceParameters())) {
            params = jobContext.getInstanceParameters();
        } else {
            params = jobContext.getJobParameters();
        }
        LOGGER.info("JavaDemoProcessor params:{}", params);
        return new ProcessResult(InstanceStatus.SUCCESS);
    }

}