- Determine whether the host froze, rebooted, lost networking, lost storage, or only lost one or more guests. Each has a different diagnosis path.
- Identify the previous boot and inspect its full kernel timeline:
journalctl --list-bootsthenjournalctl -b -1 -k --no-pager - Review warning-or-higher messages, not only errors:
journalctl -b -1 -p warning --no-pager - Correlate the first incident with kernel, firmware, passthrough, storage, and package changes.
- Follow the diagnostic branch that matches the symptom – do not use a universal storage-first or memtest-first sequence.
- If the previous boot is missing, verify journal persistence and health before assuming hardware failure.
- For recurring no-log failures, configure external evidence collection before changing multiple variables.
Proxmox random crashes are harder to diagnose than most infrastructure problems – not because the fix is complicated, but because the symptoms look identical across completely different root causes. A storage I/O stall, a kernel regression after an update, a power-management interaction, and a RAM error can all produce the same result: the host goes down without warning.
Most operators start by pulling hardware when investigating proxmox random crashes. That is usually the wrong first move. The correct sequence is: classify what actually failed, preserve evidence for the next crash, read logs, correlate recent changes – and only then move to hardware testing.
This guide covers the full diagnosis workflow for Proxmox VE 8.x and 9.x on bare metal. The five branches below are unranked diagnostic paths, not a frequency-ranked list of causes – select the branch that matches the observed failure pattern and available evidence.
What Kind of Crash Happened?
Before opening a single log file, identify which failure category you are dealing with. “Proxmox crashed” describes at least eight different situations with different diagnosis paths.
| Symptom | Category | Where to start |
|---|---|---|
| Host completely frozen, no response | Hard lockup, storage stall, or platform failure | Physical or IPMI console; capture dmesg -T if still responsive |
| Host rebooted itself without warning | Kernel panic, watchdog, HA self-fencing, platform reset, or power event | journalctl -b -1 -k; inspect shutdown boundary and BMC or UPS event log |
| Kernel panic or MCE visible on console | Evidence-bearing kernel or hardware failure | Preserve console output; inspect previous boot kernel journal |
| GUI unreachable, SSH still works | pveproxy or management-plane failure | Check pveproxy service, certificates, listening sockets, and journal |
| Host unreachable via network, local console works | NIC, bridge, bond, driver, or routing failure | Inspect link and bridge state; check current and previous boot kernel journal |
| Only VMs or containers crashed, host still up | Guest crash, QEMU or LXC failure, OOM, task failure | Proxmox task logs (current boot): pvenode task list --errors --vmid <ID>; journalctl -b -g 'qemu|kvm|oom|killed' |
| Storage became slow, stalled, or unavailable | Device, HBA, ZFS, or network-storage path failure | journalctl -b -1 -k; zpool status -v; zpool events -v; storage events |
| Cluster node disappeared from the cluster | Network partition, corosync, quorum, or watchdog self-fencing | journalctl -u corosync; pvecm status; HA and watchdog evidence |
The category determines everything that follows when diagnosing proxmox random crashes. A frozen host with empty logs points toward hardware or power-path issues. A clean self-reboot with logs intact more strongly suggests kernel panic with auto-reboot, watchdog action, HA self-fencing, or a platform reset – not OOM, since the default panic_on_oom=0 does not reboot the host. It’s also worth ruling out an administrator-initiated reboot, scheduled automation, ACPI power events, package hooks, UPS actions, or an external management tool before assuming any of the above. A host that is “unreachable” but still running points toward a network plane or bridge problem, not a host crash at all.
Operators frequently investigate a frozen Proxmox GUI as a host crash. In reality, the host may still be running. The failure could be pveproxy, a failed NIC, a broken bridge configuration, or a corosync issue – none of which are host crashes. Always verify whether the host is actually dead before investigating why it died. Ping the management IP. Try SSH. Check from another node if clustered. A day of hardware investigation is easy to waste on a pveproxy restart.
Crash Investigation Workflow
Run this sequence every time, in this order.
Step 1 – Classify precisely what failed
Use the table above. Not “Proxmox crashed” – but which specific domain: whole host locked, host reset itself, guest-only outage, storage-path stall, management plane outage, cluster membership loss. Each leads to a different log set and a different set of tests.
Step 2 – Preserve evidence before touching anything
Before reseating RAM, changing BIOS settings, or disabling C-states, make sure the next crash will be more informative than this one. If the journal was not persistent before the crash, enable it now. If the host is isolated, set up remote logging to another machine on the same network, during a maintenance window, not mid-incident. Do not mutate the system in ways that destroy the only evidence thread you have.
Any command below that touches the bootloader, kernel command line, or CPU idle states can leave a remote host unreachable or unbootable. Before making any of these changes: confirm physical or out-of-band console access, record the current configuration, change one variable at a time, and use a maintenance window. Capture the baseline first:
cat /proc/cmdline
proxmox-boot-tool status
proxmox-boot-tool kernel list
cp /etc/kernel/cmdline /root/kernel-cmdline.before-crash-test 2>/dev/null || true
cp /etc/default/grub /root/grub.before-crash-test 2>/dev/null || trueStep 3 – Build a timeline from boot boundaries
journalctl --list-boots
journalctl -b -1 -k --no-pager
journalctl -b -1 -p warning --no-pager
journalctl -b -1 --no-pager | tail -300
last -x | head -50Work from specific boot IDs and the timestamp of the incident. Start from the previous boot boundary and read forward. Start with a narrow window around the incident, then expand backward until the first abnormal event or relevant configuration change appears. Treat last -x as supporting evidence, not the authoritative crash timeline – it depends on wtmp availability and doesn’t reliably prove a clean shutdown in every environment. The goal is to establish what happened before the crash, not just what the last log entry was.
Step 4 – Correlate recent changes before blaming hardware
Before running memtest or swapping components, ask: what changed before the first incident? A kernel update, a microcode update, a NIC or HBA driver change, a new passthrough configuration, a storage layout modification. Proxmox VE 9.2 ships with Linux 7.0 as the stable default – kernel churn is real and frequent in 2026 deployments. If crashes started immediately after an update, that is a plausible branch to investigate before hardware testing, not a confirmed cause yet. The Proxmox update guide covers the safe update workflow and rollback path.
pveversion -v
uname -r
proxmox-boot-tool kernel list
dpkg -l 'proxmox-kernel-*' | grep '^ii'
zgrep -hE 'Start-Date|Commandline|Upgrade:|Install:|Remove:' /var/log/apt/history.log*If unattended upgrades are enabled, check whether an automated update coincided with the first incident:
journalctl -u apt-daily-upgrade.service
journalctl -u unattended-upgrades.serviceStep 5 – Run branch-specific investigation
Match the investigation to the symptom class. Storage-like symptom? Go to pool health and I/O errors first. Crashes under idle or overnight? Test the power or idle-state path. Only VMs died? Check the journal for OOM or QEMU process exits before assuming host-level failure. This approach eliminates false directions faster than generic burn-in testing.
Most operators start with memtest. That is usually not the highest-yield first move. Storage stalls, kernel regressions, and network-plane failures are faster to diagnose from logs than from hardware testing. Memtest answers one narrow question. Logs are already there.
How to Read Proxmox Logs
Most crash investigations of proxmox random crashes are won or lost here. On clean Proxmox VE 8 and 9 installations, rsyslog is not installed by default. The primary source of system and kernel events is the systemd journal. For the full log architecture and component map, see the Proxmox logs guide. For journald configuration options, see the systemd-journald configuration reference.
| Symptom | First to check | Command |
|---|---|---|
| Host rebooted | Previous boot kernel journal | journalctl -b -1 -k --no-pager |
| Warning-level events preceding crash | Previous boot, warning and above | journalctl -b -1 -p warning --no-pager |
| Kernel panic or MCE visible on console | Previous boot kernel and warning events | journalctl -b -1 -k --no-pager then journalctl -b -1 -p warning --no-pager |
| Host frozen or storage stalling (still responsive) | Current kernel ring buffer | dmesg -T | grep -iE 'ata|error|fail|zfs' (current boot only – after reboot use journal) |
| VM crashed, host did not reboot | Task log and current-boot journal | pvenode task list --errors --vmid <ID>; journalctl -b -g 'qemu|kvm|oom|killed' |
| VM crashed just before an unexpected host reboot | Task log and previous-boot journal | pvenode task list --errors --vmid <ID>; journalctl -b -1 -g 'qemu|kvm|oom|killed' |
| Cluster node lost | Corosync journal | journalctl -u corosync; journalctl -b -1 -u corosync; pvecm status |
| OOM event | Journal kernel filter | journalctl -b -1 -k -g 'Out of memory|oom-kill|Killed process' |
Key log paths on modern Proxmox VE 8/9: use pvenode task list --errors and pvenode task log <UPID> as the supported interface for Proxmox task history, the raw /var/log/pve/tasks/ path is the same data on disk but not the first place to look. /var/log/apt/history.log* holds package and kernel update history. On upgraded systems where rsyslog is installed, /var/log/syslog and /var/log/kern.log may also be available, but the journal is the primary source on clean installs.
The most useful starting commands after a Proxmox host reboots unexpectedly:
journalctl --list-boots
journalctl -b -1 -k --no-pager
journalctl -b -1 -p warning --no-pagerNote that dmesg after a reboot shows only the current boot’s kernel ring buffer – it does not contain the previous session. After a reboot, always use journalctl -b -1 -k to access the previous boot’s kernel events. If the incident didn’t involve a reboot at all, for example a VM crash with the host still running, use -b (current boot) instead of -b -1; reaching for the previous boot on a current-boot incident looks at the wrong window entirely.
If the previous boot is missing from journalctl --list-boots, verify journal state before assuming hardware failure:
test -d /var/log/journal && echo "persistent journal directory exists"
journalctl --disk-usage
journalctl --verify
systemctl status systemd-journal-flush.servicejournalctl --verify checks journal-file consistency, it doesn’t prove that every crash-relevant message was actually committed before the reset. A missing boot entry may indicate volatile-only journal storage, journal corruption, an unavailable filesystem, retention limits, or a reset that occurred before buffered messages were committed to disk.
Five High-Yield Diagnostic Branches
There is no public Proxmox telemetry dataset that ranks proxmox random crashes by root cause frequency. The branches below are unranked diagnostic paths, not a ranked list of the most common causes – select the branch that matches the observed failure pattern and available evidence from the classification table above.
1. Storage I/O Path
Storage problems are commonly missed in proxmox random crashes because the host often appears frozen long before a drive is reported as failed. There is no obvious disk error on screen – just an unresponsive system. OpenZFS documents slow I/O operations as a distinct warning signal: read/write I/O stops being serviced, commands start hanging, and in severe cases the management plane stops responding entirely. The host appears crashed but may still be alive.
kernel: ata2.00: status: { DRDY ERR }
kernel: ata2.00: error: { UNC }
kernel: end_request: I/O error, dev sdb, sector 1234567
kernel: zfs: I/O error - all blocks on device failed- Run
journalctl -b -1 -k -g 'ata|error|fail|zfs'– look for I/O errors in the previous boot’s kernel log - Run
zpool status -v– check for DEGRADED, FAULTED, or data errors - On OpenZFS versions that support slow-I/O reporting, run
zpool status -sfor slow I/O counters per device. If the option isn’t available on this version, rely onzpool events -v, kernel timing messages, and workload correlation instead - Run
zpool events -v– pool health history including delay and deadman events - Discover storage devices:
lsblk -o NAME,MODEL,SERIAL,WWN,TRAN,SIZE,TYPEthensmartctl --scan-open - Run
smartctl -a /dev/sdXfor SATA/SAS drives, orsmartctl -a /dev/nvme0andnvme smart-log /dev/nvme0for NVMe – check reallocated sectors, pending sectors, uncorrectable errors (smartmontools documentation). RAID/HBA passthrough setups may need controller-specific tools instead of talking to the drive directly
Storage I/O errors often produce inconsistent crashes: stable under light load, freeze during backups or large VM snapshots when I/O spikes. If crashes correlate with scheduled backup jobs, investigate storage before anything else. A degraded pool has reduced redundancy and may be one additional device failure or unrecoverable read error away from data loss, depending on the vdev topology. For ZFS pool architecture, see the Proxmox storage guide. For degraded pool recovery, see the ZFS recovery guide.
2. Kernel, Driver, and Firmware Regressions
Host stable for months. Kernel updated on a Tuesday. Proxmox random crashes start by the weekend. That’s a plausible branch worth testing when the timing matches, not an automatic conclusion. With Proxmox VE 9.2 shipping Linux 7.0 as the stable default kernel, kernel churn is an active factor in 2026 deployments. Common triggers include NIC driver changes, IOMMU reconfiguration after passthrough setup, Intel or AMD microcode updates, and kernel module conflicts after major version jumps. The Proxmox Host Bootloader documentation covers kernel selection and pinning in detail.
kernel: BUG: soft lockup - CPU#0 stuck for 23s!
kernel: igb: eth0: Reset adapter
kernel: DMAR: DRHD: handling fault status reg- Cross-reference boot history with package changes:
journalctl --list-bootsandzgrep -hE 'Start-Date|Commandline|Upgrade:' /var/log/apt/history.log* - Check bootloader state:
proxmox-boot-tool statusandproxmox-boot-tool kernel list - Boot the previous kernel: select it at the boot menu, or pin it for next boot:
proxmox-boot-tool kernel pin <kernel-version> --next-boot - If stable on the previous kernel, that strengthens the regression hypothesis, confirm over at least the normal failure interval before treating it as proof, and don’t change any other variable during the comparison. If it holds, pin it while tracking the upstream fix:
proxmox-boot-tool kernel pin <kernel-version>. Unpin after the fix is confirmed:proxmox-boot-tool kernel unpin - For IOMMU-related crashes: verify the IOMMU parameter in the active bootloader config. On GRUB systems, edit
/etc/default/gruband runupdate-grub. On proxmox-boot-tool systems, edit/etc/kernel/cmdlineand runproxmox-boot-tool refresh. Confirm withcat /proc/cmdlineafter reboot. - Check for MCE events on both current and previous boot:
journalctl -k -g 'mce|machine check'andjournalctl -b -1 -k -g 'mce|machine check'
Months of stability followed by daily proxmox random crashes right after a kernel update is a recurring pattern in forum reports – host stable on the prior kernel, crashing on the new one. If stability returns on the previous kernel, that strengthens the hypothesis even before the root cause is identified, though it isn’t proof on its own. Pin the working kernel version and track the upstream changelog for the relevant fix.
3. Power, Platform, and Deep-Idle Interactions
One recurring pattern for this proxmox random crashes category is timing. Thermal problems happen under heavy load. Deep-idle problems happen overnight, during low utilization, or on a schedule that has nothing to do with workload. This category explains a fair number of clean reboots with no log evidence, and it’s often underdiagnosed because restricting C-states looks like a workaround rather than a diagnosis.
On homelab hardware – N100 mini PCs, NUC-class systems, Ryzen-based platforms – this branch comes up earlier than it would on enterprise servers. Deployment reports document NUC-class Proxmox setups with irregular reboots resolved by C-state restriction or BIOS firmware updates.
Quick validation test
First, check the active idle driver and current firmware idle settings to pick the correct parameter, this is not a one-size-fits-all fix:
cat /sys/devices/system/cpu/cpuidle/current_driver
cpupower idle-infoIf the failure pattern strongly correlates with idle transitions, temporarily limit deeper idle states using the parameter documented for that specific driver, add it to the bootloader kernel command line. On GRUB systems, edit /etc/default/grub and run update-grub. On proxmox-boot-tool systems, edit /etc/kernel/cmdline and run proxmox-boot-tool refresh. For the intel_idle driver specifically:
intel_idle.max_cstate=1For the acpi_idle driver, processor.max_cstate=1 applies to ACPI processor idle handling, it is not a universal vendor-neutral equivalent for every modern CPU, and some AMD platforms need firmware-level testing instead of a kernel parameter:
processor.max_cstate=1Prefer a reversible BIOS/UEFI-level test where the board supports it. C-state restriction increases idle power consumption and may affect thermal profile – treat it as a diagnostic experiment, not a permanent configuration. If the host remains stable for longer than its normal failure interval, the result strengthens the idle or power-management hypothesis but does not prove it. Monitor for at least one to two normal failure intervals, or reproduce the idle transition under controlled conditions. After confirming stability, investigate BIOS firmware updates for the specific board before deciding whether to leave the restriction in place.
4. RAM, CPU, PCIe, and RAS Events
RAM problems are dangerous partly because visibility varies significantly by platform. ECC platforms are more likely to expose corrected and uncorrected memory events through EDAC, MCE, firmware, or BMC logs. Non-ECC systems generally provide less visibility, though some hardware faults may still surface as MCE, AER, or platform events, absence of evidence there isn’t the same as absence of a problem. A failing DIMM on a non-ECC system can corrupt kernel state silently, producing a Proxmox kernel panic or hard freeze with no useful log evidence.
kernel: EDAC MC0: 1 CE memory read error on CPU_SrcID#0
kernel: mce: [Hardware Error]: Machine check events logged
kernel: {1}[Hardware Error]: event severity: corrected- Check for MCE, EDAC, PCIe AER events on both boots:
journalctl -k -g 'mce|edac|hardware error|aer'andjournalctl -b -1 -k -g 'mce|edac|hardware error|aer' - If rasdaemon is installed:
systemctl status rasdaemonthenras-mc-ctl --status,ras-mc-ctl --summary,ras-mc-ctl --errors - Check BMC/IPMI System Event Log where available:
ipmitool sel elist - Run memtest86 or memtest86+ – multiple complete passes, preferably overnight or for a duration appropriate to the installed memory size. One clean pass does not prove memory health, and one error is already significant. Record the tool version, pass count, exact failing address and test number if any, and whether XMP/EXPO was enabled – a repeated address pattern can help distinguish a DIMM from a slot or memory-controller path
- Test one DIMM at a time if errors are found; disable XMP/EXPO profiles in BIOS during testing
- For PCIe passthrough setups: check IOMMU group configuration and AER events
Repeated, increasing, or location-consistent correctable errors justify investigation and may indicate a degrading DIMM, socket, channel, or memory controller. A correctable error does not guarantee that an uncorrectable error will follow, but increasing error rates are a signal worth acting on before the platform makes the decision for you.
RAM testing belongs in this branch – not as the universal first step for proxmox random crashes. Without MCE or EDAC events in logs and without symptoms that specifically suggest memory, starting with memtest before investigating storage and kernel is usually the slower path. The counterargument: on non-ECC systems, the absence of log evidence is one of the patterns a RAM failure can look like, though it isn’t the only explanation for a silent crash.
Thermal note: Elevate thermal investigation when crashes correlate with load, fan behavior, ambient temperature, dust buildup, fanless chassis, dense mini-PC nodes, or thermal events in BMC or firmware logs. On standard SMB servers in proper enclosures, thermal is less commonly the root cause than the branches above. Useful commands where available:
sensors
journalctl -b -1 -k | grep -iE 'thermal|temperature|throttl'
ipmitool sensor5. OOM and Memory Pressure
OOM is in this list because Linux by default does not crash the host when memory runs out – it kills processes. With panic_on_oom=0 (the default), the kernel selects an OOM victim using its badness heuristics within the applicable cgroup constraints. The largest process is often selected, but this is not guaranteed. A container workload can also trigger a cgroup-local OOM without host-wide memory exhaustion. The host survives; the affected process dies.
OOM becomes a host-level issue only if the killed process is something the host depends on, or if panic_on_oom has been explicitly set to 1. In many cases, what looks like a host crash is an OOM event that killed the qemu process, though not every killed QEMU process implies host-wide OOM, it can also be a cgroup-local limit on that specific guest.
kernel: Out of memory: Kill process 4821 (kvm) score 847 or sacrifice child
kernel: Killed process 4821 (kvm) total-vm:8388608kB, anon-rss:7340032kB- Run
journalctl -b -1 -k -g 'Out of memory|oom-kill|Killed process'(or drop-b -1if the host itself didn’t reboot) - Check memory pressure and swap before the event:
cat /proc/pressure/memory,free -h,swapon --show - Check whether
systemd-oomdis active – it’s a separate userspace mechanism from the kernel OOM killer and behaves differently:systemctl status systemd-oomd 2>/dev/null - Check total VM RAM allocation vs physical RAM in the Proxmox UI
- Without a working balloon driver and realistic minimum/maximum settings, Proxmox cannot reclaim guest memory toward a lower configured target. Ballooning isn’t a universal fix for every guest, latency-sensitive or simultaneously-peaking workloads shouldn’t rely on it as the only control. Host-resident usage still depends on the guest workload, QEMU overhead, page sharing, cache behavior, and the storage stack
A common homelab miscalculation involves ZFS ARC sizing. Do not assume ARC size from total RAM alone. Newer Proxmox installations apply a lower ARC limit than upstream OpenZFS defaults, while upgraded or manually tuned systems may retain larger values. Check the effective limit and actual usage before attributing memory pressure to ZFS:
cat /sys/module/zfs/parameters/zfs_arc_max
arc_summary | grep -i "arc size"See the Proxmox RAM sizing guide for sizing methodology across ZFS, VMs, and the host overhead.
Did HA or the Watchdog Reboot the Node?
In a cluster, a clean reboot with no obvious hardware fault can be the node fencing itself on purpose, not a crash at all. A node that loses quorum or fails a watchdog check may deliberately reboot to protect data consistency. That’s a different investigation from a hardware failure, and treating every clean cluster reboot as self-fencing without checking is its own mistake.
journalctl -b -1 -u pve-ha-lrm.service
journalctl -b -1 -u pve-ha-crm.service
journalctl -b -1 -u corosync.service
journalctl -b -1 -k | grep -i watchdog
ha-manager status
pvecm statusAlso check the BMC reset reason if available, the watchdog device configuration, the cluster quorum timeline around the incident, and whether other nodes logged fencing activity at the same timestamp. A node fencing itself intentionally is working as designed, the follow-up question is why quorum or the watchdog check actually failed, not just that the reboot happened.
Crashes During Backup
A backup is often a load amplifier that exposes an existing weakness, but framing it only as a trigger misses cases where the backup process itself is involved. Correlate the failure with the exact backup phase – snapshot creation, data transfer, or post-backup cleanup – rather than assuming either explanation upfront.
pvenode task list --errors --typefilter vzdump
journalctl -k --since "30 minutes ago"
zpool status -v
free -hBranches worth checking, roughly in the order they tend to pay off: storage I/O saturation or timeout under the added backup load, a snapshot or guest-agent freeze/thaw issue, the backup target itself failing partway through, memory pressure from the backup process competing with guest workloads, a network or transport failure to the backup target, or a kernel/device regression that only shows up under sustained I/O. A drive with existing SMART errors, RAM already near capacity, or an already-degraded ZFS pool are common weaknesses a backup load exposes rather than causes.
When Proxmox Random Crashes Leave No Logs
The most frustrating scenario in proxmox random crashes diagnosis: the host rebooted, journalctl shows nothing unusual, the last log entry looks completely normal. No panic, no errors, no warning. Missing logs reduce the evidence available and make the abrupt-reset, hard-lockup, journal-persistence, storage, and power-path branches more important to check – they don’t by themselves identify hardware as the cause.
Journal persistence gap – systemd journal behavior depends on the Storage= setting (in journald.conf or a drop-in), the presence of a persistent journal directory, disk availability, journal health, and the point in the boot sequence at which the reset occurred. If journalctl --list-boots is missing the previous boot entry, verify state before changing anything:
test -d /var/log/journal && echo "persistent journal directory exists"
journalctl --disk-usage
journalctl --verify
systemctl status systemd-journal-flush.serviceIf persistent storage is not active, use the full sequence rather than just creating the directory:
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald
journalctl --flush
journalctl --list-bootsHard lockup or kernel panic followed by fast reboot – the kernel’s lockup detectors can trigger panic and auto-reboot. The reboot happens fast enough that journal buffers do not flush. A kernel panic may produce console, pstore, kdump, serial, or journal evidence – but it does not guarantee that the journal was flushed before reboot. A hard freeze is an uncontrolled loss of useful system progress: the host may stop scheduling tasks, servicing interrupts, completing I/O, or responding to management traffic, and it may leave no persistent evidence. To look for watchdog evidence at the next boot boundary: journalctl -b 0 -k | head -50
Power-loss-class event – PSU voltage instability under load, UPS switchover, VRM failure, board-level reset logic – none of these give the OS time to write logs. If all other causes are ruled out and crashes correlate with high-load events or specific times of day, power-path investigation is the next step. Check UPS event logs and BMC reset reason registers if available.
C-state and idle-state interaction – see branch 3 above. Silent crashes under idle or overnight periods are the signature pattern.
MCE, EDAC, and memory-controller path – fatal uncorrectable errors can cause immediate hang or reboot with no opportunity for userspace logging. See branch 4.
Proxmox HA self-fencing – see the watchdog section above for the full evidence checklist.
Instrument the Next Crash
If proxmox random crashes are recurring and logs are consistently empty, change the instrumentation before waiting for the next event, and do it during a maintenance window, not reactively mid-incident. Do not swap hardware blind.
# Enable persistent journal
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald
journalctl --flush
# Install rsyslog if not present - do this during a maintenance window
apt update && apt install rsyslog
cat >/etc/rsyslog.d/60-remote.conf <<'EOF'
*.* @@192.168.1.100:514
EOF
rsyslogd -N1
systemctl enable --now rsyslog
# Generate a test event and confirm it arrives on the receiver
logger -p user.warning "proxmox remote logging test $(date -Is)"The @@ prefix sends over TCP (more reliable than single @ UDP), but plain TCP syslog has no encryption or authentication, and a broad *.* filter can produce a high-volume feed that carries sensitive environment data. Don’t skip the test event above, remote logging that has never been verified end-to-end is not instrumentation. For environments where log delivery actually matters, prefer RELP or TLS over plain TCP, restrict the firewall to the receiver, use disk-assisted queues if message loss is a concern, and control retention and access on the receiving side.
For severe cases where the crash leaves no journal at all: kdump-tools captures a kernel crash dump to disk before the system halts. A working setup needs reserved crash kernel memory, a loaded capture kernel, a configured dump target with enough free space, and validation after reboot, installing the package alone is not sufficient. Check the actual state before relying on it:
cat /proc/cmdline | grep -o 'crashkernel=[^ ]*'
systemctl status kdump-tools
kdump-config showDo not trigger a test crash on a production node without a maintenance window, console access, and verified backups. Even a correctly configured kdump can still fail to capture anything for power loss, a total hardware reset, some lockups, a failure that prevents the capture kernel from starting, or a storage-path failure affecting the dump target itself.
For hard lockups and power-cut-class failures, remote logging, serial console, IPMI Serial-over-LAN, netconsole, UPS event logs, or BMC event registers may capture evidence that the journal cannot.
What to Do Next
Storage I/O errors or degraded pool – see the ZFS recovery guide for the degraded pool decision tree. A degraded pool has reduced redundancy and may be one additional device failure or unrecoverable read error away from data loss, depending on the vdev topology.
Kernel regression confirmed – boot the previous kernel to verify stability over at least the normal failure interval. If stable, pin the working version while tracking the upstream fix: proxmox-boot-tool kernel pin <kernel-version>. Without pinning, the next apt upgrade may reinstall the broken kernel. See the Proxmox update guide for the rollback workflow. Unpin after the fix is confirmed in the release changelog.
Power or idle-state interaction – C-state restriction as stabilization while investigating BIOS firmware updates. Monitor for at least one to two normal failure intervals after any change before concluding the cause is identified.
RAM errors confirmed – replace the failing DIMM, test modules individually. Repeated or increasing correctable errors justify action. If running non-ECC RAM on production workloads, this is the evaluation point for ECC hardware.
OOM confirmed – resize VM allocations, verify balloon-driver support and set realistic minimum/maximum values for suitable guests, or expand physical RAM. The Proxmox RAM sizing guide covers the allocation methodology.
Watchdog or HA self-fencing confirmed – the reboot was the system working as designed. Investigate why quorum or the watchdog check failed in the first place, using the checklist above, rather than treating the reboot itself as the problem.
Logs empty, cause unresolved – instrument first, then wait for the next event. Changing multiple variables simultaneously makes the next crash harder to read, not easier.
Crashes unresolvable, data at risk – stop diagnosing and restore. See the PBS restore guide for the fastest path from backup to running VMs. If backups are not current, review the Proxmox backup strategy guide before the next incident.
FAQ
What causes Proxmox random crashes – where do I start?
Run journalctl --list-boots then journalctl -b -1 -k --no-pager immediately after recovery. Follow with journalctl -b -1 -p warning --no-pager to catch device warnings, hung task events, and storage timeouts that fall below error level. If the previous boot entry is missing, verify journal persistence before drawing any conclusions. The five diagnostic branches for proxmox random crashes are storage I/O, kernel or driver regressions, power or idle-state interactions, RAM and hardware errors, and OOM – choose the branch that matches the failure class, not a fixed order.
Can a Proxmox host crash because of a VM?
Ordinary guest failures are normally isolated from the host. Host impact is uncommon but still possible through kernel, KVM, or QEMU defects, severe resource exhaustion, storage-path failures, or passthrough and device interactions. In many cases where a guest appears to have crashed the host, an OOM event killed the qemu process – the host did not crash, the VM process did. Check the current boot’s journal for this, not the previous boot, unless the host itself also rebooted.
Why do Proxmox random crashes happen only during backups?
A backup is often a load amplifier that exposes an existing weakness – a drive with SMART errors, RAM near capacity, a degraded ZFS pool. But a backup can also trigger a software, snapshot, storage, or transport bug in its own right. Correlate the failure with the exact backup phase – snapshot creation, data transfer, or post-backup cleanup – rather than assuming either explanation.
Is one memtest86 pass enough to rule out RAM?
No. Run multiple complete passes, preferably overnight or for a duration appropriate to the installed memory size. Record the tool, version, pass count, and whether XMP or EXPO was enabled. On non-ECC systems, even a clean result does not fully rule out RAM – hardware faults on non-ECC platforms are often intermittent and may not be exposed by any standard test pattern.
What is the difference between a kernel panic and a hard freeze?
A kernel panic is an explicit kernel failure that may produce console, pstore, kdump, serial, or journal evidence – but it does not guarantee the journal was flushed before reboot. A hard freeze is an uncontrolled loss of useful system progress: the host may stop scheduling tasks, servicing interrupts, completing I/O, or responding to management traffic, and may leave no persistent evidence. Kernel panics sometimes leave logs. Hard freezes often do not – which is why the instrumentation section exists.
Does OOM reboot Proxmox?
Not by default. With the default panic_on_oom=0, the kernel kills a process instead of rebooting the host, most often the largest qualifying process under its badness heuristics, though not guaranteed to be the largest one. The host only reboots from OOM if panic_on_oom was explicitly set to 1, or if the killed process was something the host itself depended on.
This article covers diagnosis methodology for Proxmox VE 8.x and 9.x on x86-64 bare metal hardware, homelab and SMB deployment patterns. Logging behavior throughout reflects clean PVE 8/9 installations where rsyslog is not present by default. Upgraded systems that retain rsyslog will have additional log paths available. Not covered here: ZFS pool recovery after confirmed disk failure, PBS backup restore procedure, Proxmox cluster node recovery after network partition, hardware selection for stability – each has a dedicated article. ARM-based deployments and containerized-only environments may exhibit different crash patterns.
Proxmox VE Series
27 articles – Installation · Storage · Networking · HA · Recovery