windows dhcp服务器中“已到期却仍显示为active”的ip属死锁租约,需人工强制回收:先通过控制台确认其active状态及客户端离线,再右键删除或用powershell批量清理,并启用自动清理、定期压缩数据库、排查静态地址冲突以防复发。
windows dhcp 服务器中出现“已到期却仍显示为 active”的 ip(俗称“死锁 ip”或“僵尸租约”),本质是租约状态卡在 active 而非 expired,说明客户端未主动释放、服务端也未触发清理——此时不能靠等待自动回收,需人工介入强制回收。
确认该 IP 确实处于“假活跃”状态
先登录 DHCP 管理控制台,展开对应作用域 → “地址租用”,查找目标 IP。重点看两列:
- IP 地址:确认是否为你想回收的地址
- 租约状态:若显示为 Active,但客户端早已离线(如设备报废、断电、网线拔除)、且 客户端 ID 或 MAC 地址无响应,即属死锁租约
- 补充验证:在另一台机器上 ping 该 IP,或用
arp -a | findstr "xxx.xxx.xxx.xxx"查看 ARP 表是否为空 —— 若无响应,基本可判定为无效占用
通过 DHCP 控制台手动删除租约
这是最直接、无需命令行的方式:
- 在“地址租用”列表中,右键点击目标 IP 条目 → 选择“删除”
- 弹出确认框时点“是”
- 该 IP 立即从 Active 状态移除,回归可用地址池
- 注意:此操作不依赖客户端在线,也不需要重启 DHCP 服务
用 PowerShell 批量筛查并清除失效 Active 租约
当存在多个疑似死锁 IP 时,手工逐条删效率低。可运行以下 PowerShell 命令快速定位并清理:
- 先查出所有 Active 租约中、超过租期 2 倍时间仍未续租的记录(假设租期为 3 天,则筛选 >6 天未更新的):
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 | Where-Object {$_.ClientId -ne $null -and $_.AddressState -eq "Active" -and $_.LeaseExpiryTime -lt (Get-Date).AddDays(-6)} - 确认结果无误后,加管道执行删除:
| Remove-DhcpServerv4Lease -Force - 整条命令示例:
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 | Where-Object {$_.AddressState -eq "Active" -and $_.LeaseExpiryTime -lt (Get-Date).AddDays(-5)} | Remove-DhcpServerv4Lease -Force
避免死锁反复发生的长效配置
人工回收只是救火,根本在于预防:
- 启用自动清理:DHCP 控制台 → 右键服务器 → 属性 → “高级”选项卡 → 勾选 自动清理过期租约,设清理间隔为 24 小时,阈值填为实际租期天数(如租期 3 天,阈值填 3)
- 定期压缩数据库:每月运行一次
esentutl /d C:\Windows\System32\dhcp\dhcp.mdb(需停止 DHCP 服务后再执行) - 检查是否有静态地址冲突:确认该 IP 未被其他设备手动设为静态,否则即使清空租约,下次也会因地址冲突导致客户端获取失败










