今天vCenter所在的Windows 2012 Server,非正常关机后,出现了vCenter服务不能正常启动的问题,经过状态分析和网上相关资料参考,最终解决了问题,使vCenter服务恢复正常了。
今天上午vCenter所在的Windows 2012 Server操作系统的内存使用比较高,同事感觉有问题,就直接在vCenter管理界面中,将这台虚拟机使用电源强制重启了,结果重启之后,vCenter服务一直不能够正常启动。
尝试检查了vCenter使用的Oracle数据库服务、监听、表空间使用率各方面正常后,又多次尝试重启VMware服务结果都没有启动成功。
日志查询:
http://www.2cto.com/os/201202/119166.html
通过该网页可以确认在C:\ProgramData\VMware\VMwareVirtualCenter\Logs 目录下存放有vCenter的日志,其中 vpxd-n.log就是vCenter主服务器vpxd服务启动时的日志,每次启动时,前面的日志都会打包成为.tar.gz压缩包,新产生一个日志。
经过对日志文件查询,发现了一些问题,但之前没有看到和研究过vCenter的启动过程,所以找了一个服务器上之前的日志文件,进行对比查看。
(两个日志文件也放在博客附件中)
通过两个日志文件对比,分析vCenter不能启动成功的错误如下:
vCenter 启动过程中报错:
在utilvpxdDbLoad过程中,丢失了很多配置设置;在正常启动会,这些Init初始参数会从 VpxProfiler中导入参数;
2014-09-19T13:54:31.625+08:00 [07968 warning'VpxProfiler'] Vpxd::ServerApp::Init [ClusterMo::InitEVCModes()] took 912 ms
2014-09-19T13:54:31.933+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property maxVirtualDiskCapacity
2014-09-19T13:54:31.938+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property containerId
2014-09-19T13:54:31.940+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property persist set
2014-09-19T13:54:31.942+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property mounted set
2014-09-19T13:54:31.946+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property vmfs.local
2014-09-19T13:54:31.961+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property maxVirtualDiskCapacity
2014-09-19T13:54:31.963+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property containerId
2014-09-19T13:54:31.964+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property persist set
2014-09-19T13:54:31.965+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property mounted set
2014-09-19T13:54:31.966+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property vmfs.local
2014-09-19T13:54:31.976+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property maxVirtualDiskCapacity
2014-09-19T13:54:31.976+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property containerId
2014-09-19T13:54:31.977+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property persist set
2014-09-19T13:54:31.978+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property mounted set
2014-09-19T13:54:31.979+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property vmfs.local
2014-09-19T13:54:31.989+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property
maxVirtualDiskCapacity
2014-09-19T13:54:31.990+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property containerId
2014-09-19T13:54:31.991+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property persist set
2014-09-19T13:54:31.992+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property mounted set
2014-09-19T13:54:31.993+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property vmfs.local
2014-09-19T13:54:32.006+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property maxVirtualDiskCapacity
2014-09-19T13:54:32.007+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property containerId
2014-09-19T13:54:32.008+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property persist set
2014-09-19T13:54:32.009+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Non-optional property mounted set
2014-09-19T13:54:32.010+08:00 [07968 warning'utilvpxdDbLoad'] [ORM] Load: Missing mapping for property vmfs.local
后面的SSO 部分与正常启动正常,然后从 profileprofileUtil 总创建了很多.xml文件
从 vpxdvpxdMoOptionManager 中的操作与正常启动也一样
然后在 ProxySvc 过程中,出现错误,提示初始化错误:
2014-09-19T13:54:35.666+08:00 [07968 info'ProxySvc'] Max proxy connections currently set to 2048 , buffer size: 16344bytes
2014-09-19T13:54:35.668+08:00 [07968 info'ProxySvc'] vmacore/ssl/useSSLCtxPool: true
2014-09-19T13:54:35.676+08:00 [07968 info'ProxySvc'] vmacore/ssl/serializeServerHandshake: false
2014-09-19T13:54:35.680+08:00 [07968 error'vpxdvpxdMoReverseProxy'] [VpxdReverseProxy] Failed to create http proxy: 以一种访问权限不允许的方式做了一个访问套接字的尝试。
2014-09-19T13:54:35.685+08:00 [07968 error'vpxdvpxdMain'] [Vpxd::ServerApp::Init] Init failed: ReverseProxyMo::Init()
然后是backup trace 文件,最后提示不能启动的错误:
2014-09-19T13:54:35.705+08:00 [07968 warning'VpxProfiler'] ServerApp::Init [TotalTime] took 13197 ms
2014-09-19T13:54:35.710+08:00 [07968 error'Default'] Failed to intialize VMware VirtualCenter. Shutting down...
2014-09-19T13:54:35.723+08:00 [07968 info'vpxdvpxdSupportManager'] Wrote uptime information
2014-09-19T13:54:46.510+08:00 [07964 warning'VpxProfiler' opID=SWI-6c4f3258] VpxUtil_InvokeWithOpId [TotalTime] took 12002 ms
2014-09-19T13:56:34.519+08:00 [07608 warning 'VpxProfiler'opID=SWI-5c8022d1] VpxUtil_InvokeWithOpId [TotalTime] took 12001 ms
2014-09-19T13:56:35.735+08:00 [07968 info 'Default']Forcing shutdown of VMware VirtualCenter now
所以整个启动过程有两方面的错误,一是丢失了很多maping文件;二是初始化失败,以一种访问权限不允许的方式做了访问套接字的尝试;
然后提示正在关闭,强制关闭 VMware VirtualCenter now。
从日志对比可以分析出,上面标红的部分,就是产生错误的原因。
知道了错误原因就该分析如何解决。
问题解决过程:
解决方法一:
在网络上找到一篇类似的文章:
http://bbs.hh010.com/forum.php?mod=viewthread&action=printable&tid=293389
意思是说80端口被占用,所以vCenter无法启动了,但他用的是一个sql server进程,关闭后vCenter就正常了。
我用的是Oracle数据库,80端口应该被其他系统占用了。
查找80端口被占用的情况:
http://www.2cto.com/os/201211/172327.html
1、Windows平台
在windows命令行窗口下执行:
C:\>netstat -aon|findstr "80"
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2736
看到了吗,端口被进程号为2736的进程占用,继续执行下面命令:
C:\>tasklist|findstr "2736"
peer.exe 2016 Console 0 16,064 K
很清楚吧,thread占用了你的端口,Kill it
如果第二步查不到,那就开任务管理器,看哪个进程是2736,然后杀之即可。
我分别通过两个命令:
C:\>netstat -aon|findstr "80"
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
可见是进程号为4 的进程占用了80端口;
执行杀进程命令:
C:\>tasklist|findstr "4"
结果杀不掉,进程仍然在
到任务管理器里找个该进程号为4的应用:
名称为 System ,PID 4,正在运行,用户名System,内存 100K,描述 NT & System
直接关闭进程仍然关闭不掉,查询器属性为:
ntoskrnl.exe 进程
注意:该进程是以System服务启动,所以不能直接删除,必须停止该服务底层的sql Server服务,或者IIS服务。
解决方法二:
查找如何关闭 ntoskrnl.exe 占用 80端口的问题,找到一个网页:
http://zhidao.baidu.com/link?url=FS5JwQ_r3M9btVKjIZJNj1mgBUgcuVcwGgiQNVJ7pQ6v4YUmQhPo0UD63-UWTt4pIS9HDFnVEhENMH60gDpwJ_
怎样关闭占用80端口的pid为4的进程
我也被这个问题给纠结了好几天。重装系统都三次了。终于找到原因了;我用的是sqlserver 2008;
解决方法:window-sqlserver
2008-配置工具-sqlserver 配置管理器 找到sqlserver reportingservices服务停止;再netstat -ano
里面的80端口就不见了;吼吼!!!
但我的 Windows 2012 server上没有安装sql server,安装的是Oracle数据库没有找到对应服务;
解决方法三:
于是又从网站上找到另外的一个说法:
http://www.111cn.net/sys/Windows/46472.htm
Windows 2012 Server上,除了SQLServer的服务可能会占用80端口,还有IIS服务也会占用80端口。
我用命令停止了IIS服务:
使用命令行查询,占用80端口的服务以及不在了:
但在服务管理中查询占用80端口,PID为4的进程仍然存在,说明要避免System服务,需要停用IIS服务,重启操作系统才可以根除这个占用服务。
但Windows 2012 Server的服务配置与其他服务不太一样,需要按照下面的步骤进行查找和关闭:
打开“服务器管理器”-“IIS”- 服务——显示有三个相关IIS服务:
服务器名称 显示名称 服务名称 状态 启动类型
ApplicationHost Helper Service AppHostSvc 已停止 手动
WorldWide Web Publishing Service W3SVC 已运行 手动
WindowsProcess Activation Service WAS 已运行 手动
找到以上服务后,在服务里将各个服务禁用即可;
但Windows 2012 Server中的服务位置也与之前不太一样:服务器管理,菜单栏——工具——“服务”即可打开服务管理器,这个界面与之前的Windows版本里的服务是一样的,找到上面IIS相关的三个服务名称,右击,设定服务属性为禁用,然后重启操作系统;
(注:通过服务管理器-工具- “ODBC数据源(64位)”,可以打开ODBC数据链接的配置界面,在安装vCenter时配置数据库连接会用到该选项;)
系统重启后,可以观察到IIS没有启动,80端口和PID为4的进程没有启动;
VMware vCenter其他服务都已经启动完毕,vCenter的核心相关服务VMware VirtualCenter Server和VMware VirtualCenter Management Webservices 两个服务状态为“自动(延迟服务)”,等待其他先决条件服务启动完毕后,这两个服务也能够正常启动,vCenter状态恢复正常。