This document covers the following topics:
The more completely the following information is provided, the faster a problem can be analyzed:
A minimal example. A subprogram that reproduces the problem with as few dependencies as possible — no database access, no calls to further subprograms, hard-coded test data instead of production data. Include the parameter definition (number, type, and length of the parameters) and an example request.
Logs at TRACE level. Set loggingMode to
TRACE, restart the server, reproduce the problem, and provide the
complete log from the start onwards — it contains the version and the effective
configuration. Note that TRACE writes complete request and response
payloads — passwords are masked, other content is not — so use test data only, and
switch the level back afterwards.
The crash report, if it exists: crash.log from
<appDataDir>/crash/. See Crash
Reports.
The configuration: the natsubsrv.json in use and any
NATSUBSRV_* environment variables that are set. Remove passwords
beforehand.
Version and environment: Natsubsrv version and build number — from the startup log or from a ping requests — the Natural version, the Linux distribution and version, and the middleware in use with its version.
Classification: Does the problem occur on every call or sporadically, and since when? What changed most recently — a Natural update, a configuration change, or an increase in load?
| Symptom | Cause | Solution |
|---|---|---|
NAT6010 — memory allocation failed
|
Natural's user area is too small for the subprogram | Increase usize |
NAT3009 after idle periods
|
The database context has expired | Configure natRpc39IntervalInSeconds |
NAT3048 in all workers but one
|
The workers open Adabas with the same ETID | Set ETID=$$ in the Natural startup parameters |
NAT3148 at startup, server terminates
|
The database holding FSEC/FUSER is
not reachable yet
|
Ensure the startup order, or configure nscStartupLogonRetryCount |
| Request rejected as too large | The request exceeds the configured limit | Increase maxMessageSize |
| Repeated warnings while closing connections | The wait time is too short for the network latency | Increase closeDrainTimeout |
| Requests time out under load, workers not fully utilized | Too few workers, connections queue up | Increase numberOfWorkers, check
listen.socket.pending.accepts |
| Service fails immediately after starting | The Natural environment could not be set up, or a required file is missing | Inspect journalctl -u sag<id>npisrv — the
start script names a missing natenv, npienv, or
npisrv. See Running as a Service |
| Server runs, but ignores the configuration | The configuration file was not found, so defaults and environment variables were used | Pass config= with an absolute path; the log
reports the file it looked for when none was found, and DEBUG shows
the origin of every value
|
| Server does not start, configuration error in the log | An invalid value, or a directory that cannot be created or written | The message names the affected parameter or directory |
| Server does not start, license error | The license file is missing or expired | Install a valid Natural API Server license |
| Middleware cannot connect | Wrong port, server still starting up, or a firewall in between | Send a ping requests from the middleware host to tell the two sides apart; compare the configured ports |
If the startup logon is being retried, the log shows the reason and each attempt:
[warning] NSC LOGON failed with NAT3148 (attempt 1 of 3), retrying in 5 second(s). [warning] NSC LOGON failed with NAT3148 (attempt 2 of 3), retrying in 5 second(s). [error] NSC LOGON still failing with NAT3148 after 3 attempt(s), giving up. The database holding FSEC/FUSER could not be reached.
If the server or one of its workers terminates on a fatal signal (for example
SIGSEGV or SIGABRT), Natsubsrv captures the crash data and
stores it under <appDataDir>/crash/. The data is first written in a
compact binary form and is converted into the readable report
crash.log afterwards — for a worker by the parent process, for
the server itself at its next start.
Provide crash.log when reporting a problem. The file is appended to, so it can contain several crashes; keep the whole file rather than an excerpt.