apache/skywalking · error · IllegalStateException

could not found the process traffic model

Error message

could not found the process traffic model

What it means

EBPFProfilingQueryService.getProcessModel() lazily locates the storage Model for ProcessTraffic.INDEX_NAME ('process_traffic') among all registered storage models. If no model with that exact name exists, it throws IllegalStateException — meaning the eBPF profiling query path was invoked while the process-traffic stream was never registered. This is an environment/config mismatch surfaced lazily on first query, not at boot.

Source

Thrown at oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/EBPFProfilingQueryService.java:126

        if (processMetricsDAO == null) {
            final StorageDAO storageDAO = moduleManager.find(StorageModule.NAME)
                    .provider()
                    .getService(StorageDAO.class);
            this.processMetricsDAO = storageDAO.newMetricsDao(new ProcessTraffic.Builder());
        }
        return processMetricsDAO;
    }

    private Model getProcessModel() {
        if (processTrafficModel == null) {
            for (Model model : this.storageModels.allModels()) {
                if (Objects.equals(model.getName(), ProcessTraffic.INDEX_NAME)) {
                    processTrafficModel = model;
                    break;
                }
            }
            if (processTrafficModel == null) {
                throw new IllegalStateException("could not found the process traffic model");
            }
        }
        return processTrafficModel;
    }

    private EBPFProfilingAnalyzer getProfilingAnalyzer() {
        if (profilingAnalyzer == null) {
            this.profilingAnalyzer = new EBPFProfilingAnalyzer(moduleManager, config.getMaxDurationOfQueryEBPFProfilingData(),
                    config.getMaxThreadCountOfQueryEBPFProfilingData());
        }
        return profilingAnalyzer;
    }

    public IMetadataQueryDAO getMetadataQueryDAO() {
        if (metadataQueryDAO == null) {
            metadataQueryDAO = moduleManager.find(StorageModule.NAME)
                    .provider()
                    .getService(IMetadataQueryDAO.class);

View on GitHub (pinned to 102af09b4a)

Solutions

  1. Confirm the OAP deployment includes the eBPF profiling/process modules (agent-analyzer / core profiling stream registration) so the process_traffic model is created at boot.
  2. Check storage backend for the process_traffic resource (index/measure); if missing on a non-init node, let the init OAP create it or push the runtime rule.
  3. Avoid calling the eBPF profiling query APIs on trimmed tool deployments that do not register the model.
  4. On k8s, ensure all OAP replicas run the same image/module set.
Defensive patterns

Strategy: validation

Validate before calling

// Guard the query path
boolean processModelPresent = storageModels.allModels().stream()
    .anyMatch(m -> Objects.equals(m.getName(), ProcessTraffic.INDEX_NAME));
if (!processModelPresent) throw new IllegalStateException("process_traffic model unavailable; check OAP modules");

Type guard

boolean ebpfProcessQuerySupported(StorageModels models) { return models.allModels().stream().anyMatch(m -> "process_traffic".equals(m.getName())); }

Try / catch

try { result = ebpfProfilingQueryService.queryProcesses(...); } catch (IllegalStateException e) { if (e.getMessage().contains("process traffic model")) { return emptyResult(); } throw e; }

Prevention

When it happens

Trigger: Any eBPF profiling query that needs to join profiling tasks with process traffic (getProcessModel() called) while the ProcessTraffic model is absent from StorageModels.allModels() — e.g. the OAP booted without the profiling/process modules or the model was never created because no stream registration ran.

Common situations: Custom OAP packaging (server-tools / trimmed server-starter) that drops the module registering ProcessTraffic; querying eBPF profiling endpoints against a node whose module set differs; older storage nodes in a mixed cluster that never installed the process_traffic resource.

Related errors


AI-assisted analysis of apache/skywalking@102af09b4a (2026-08-14). Data as JSON: /api/errors/17380f3f00aba648. Report an issue: GitHub.