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
- 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.
- 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.
- Avoid calling the eBPF profiling query APIs on trimmed tool deployments that do not register the model.
- 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
- Boot a canary OAP and verify the process_traffic resource exists before exposing eBPF profiling APIs.
- Use identical OAP images/module sets across replicas.
- Do not strip core profiling stream modules from custom packagings.
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
- wrong stack data
- Unsupported predicted value type: {}
- line {}:{} {}
- Unsupported aggregateLabels function.
- LATEST can only be used in time series result.
AI-assisted analysis of apache/skywalking@102af09b4a (2026-08-14).
Data as JSON: /api/errors/17380f3f00aba648.
Report an issue: GitHub.