用python写了个oracle和dataguard环境日常巡检的程序,跑了有几年了,上周六晚上突然爆出这样的错误。
恰巧当晚有停机维护,以为是网络那边动了东西导致的,后来查了点相关信息。感觉不是网络问题,还是我这边程序出问题。
程序是将根据ip列表依次巡检各个数据库,然后将巡检信息写入到我的一个oracle里面,我以为是由于现在巡检的数据库太多,并发量大,导致这台oracle服务器无法分配更多的tcp端口来处理。折腾了半天,还是没有解决问题。
查了些资料,应该是我程序所在的windows2003服务器的问题。
对于windows2003,Windows默认为匿名(临时)端口保留的端口号范围是从1024到5000,也就是不到4000个端口,当我程序大量并发的时候,会超过这个数字。
于是打开注册列表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为MaxUserPort的REG_DWORD值,该值的范围是从5000到65534,缺省值为5000,建议将该值设置为65534
也就是允许的端口号范围改为1024-65534,这样的话,就不会出现端口号不足的问题。
增加了该值后,重启操作系统,执行python巡检程序,就没有报错发生了。
博客讲述了作者遇到的一个问题:Python编写的Oracle和DataGuard环境巡检程序在Windows2003服务器上运行时,由于大量并发导致端口耗尽。通过排查,作者发现是Windows默认的临时端口范围限制导致的问题。解决方案是调整注册表中MaxUserPort值,扩大端口范围至1024-65534,重启后问题得到解决。
3858

被折叠的 条评论
为什么被折叠?



