류짱:Beyond MySelf

테스트 환경의 시스코 UCS 블레이드에  Windows Sever 2016 를 설치  Hyper-V Role 인스톨 후 최근 릴리즈 된 Window Server 2016 insider preview 16257을 Guest VM 으로 설치하고 해당 VM에 Windows Subsystem for Linux (WSL) 설치 후 Ubuntu를 설치 하는 방법을 정리합니다.
아래 MS 사이트에 설명이 잘 되어 있지만 저의 경우에는 호스트 머신과 Window Server 2016 insider preview  VM이 인터넷이 안되는 환경이라 Hyper-v 호스트 서버에 Window Server 2016 insider preview VM을 설치하고 인터넷이 되는 환경에서 우분투를 다운 받고 해당 파일을 VM으로 복사후 설치 하였으니 참고 부탁 드립니다.
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server

[Window Server 2016 inside preview 16257버전에 Ubuntu 설치 하기]
1. 먼저 Hyper-v 호스트 서버에 Window Server 2016 inside preview 16257 설치 ISO파일을 다운로드 후 VM을 설치 합니다.
   VM 설치 방법은 워낙 간단하고 많이 알려져 있어서 간단하게 축약합니다.^^

Window Server 2016 inside preview 16257 Datacenter 버전을 선택하고 설치를 완료 합니다.

설치가 완료되면 패스워드 설정 후 해당 머신을 로그온 하여 IP 할당 및  Remote Management 등의 세팅을 완료 합니다.
Configure a Server Core installation of Windows Server 2016 with Sconfig.cmd
https://docs.microsoft.com/en-us/windows-server/get-started/sconfig-on-ws2016

그리고 Powershell을 실행 후 설치 된 VM의 버전을 확인 후

아래와 같은 커멘드로 Windows-subsystem-Linux Feature를 설치 합니다.

 

Windows-subsystem-Linux Feature의 설치가 완료되면 해당 VM은 인터넷이 안되는 환경이기 때문에 인터넷이 가능한 PC나 서버에서
Ubuntu설치 파일을 다운로드 합니다.
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server
download Ubuntu app
Ubuntu

파워셀로 다운로 예

다운로드 한 Ubuntu설치 파일을 Hyper-v 호스트에 복사 후 해당 파일을 copy-vmfile 명령어를 이용해서 해당 VM으로 복사 합니다

VM에 copy된 Ubuntu 압축 파일을 폴더를 생성 한 후 expand-archive 명령어를 이용해서 압축을 해제 합니다.

압축을 푼 후 해당 폴더로 이동하여 Ubuntu.exe 파일을 실행하여 인스톨을 진행합니다.

인스톨이 완료 되면 root 패스워드를 입력하고 정상 동작 하는지 확인을 합니다.

SSH 커멘트를 이용해서 해당 VM의 gateway인 시스토 스위치에도 접속을 해 보고

Top 커멘드로 메모리 리소스 사용률도 확인하고

lscpu 커멘드로 CPU의 상태와 lsb_release -a 커멘드로 설치 된 우분투의 버전도 확인 해 보았습니다.

WSL의 동작 방식을 공부 좀 하고 포스팅 후
그 다음엔 해당 머신에 Ansible을 설치하고 구성 하고 공유해보겠습니다.

Usng Ansible through Windows 10's Subsystem for Linux
https://www.jeffgeerling.com/blog/2017/using-ansible-through-windows-10s-subsystem-linux

Windows Support
http://docs.ansible.com/ansible/latest/intro_windows.html

감사합니다.

[참고 자료]
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server


Copy-VMFile
https://technet.microsoft.com/en-us/itpro/powershell/windows/hyper-v/copy-vmfile

Details on How Linux Runs Natively on Windows
https://www.infoq.com/news/2016/04/linux-windows

Windows Subsystem for Linux: Architectural Overview
https://channel9.msdn.com/Blogs/Seth-Juarez/Windows-Subsystem-for-Linux-Architectural-Overview

저작자 표시 비영리 변경 금지
신고

Comment 0

조직에서 WSUS를 이용 하고 있다면  WUinstall이라는 툴을 이용하면 Windows update를 좀더 편하게 할 수 있습니다.
해당 프로그램을 작업 스케줄로 등록하여 자동으로 업데이트 파일 다운로드 및 설치, 재 시작이 가능 하며 ,
psexec를 이용한다면
작업 스케줄 등록이 아니더라도 Remote 서버의 업데이트를 관리 서버 한 대에서 일괄적으로 진행 할 수 있습니다.

WUinstall 프로그램은 아래사이트에서 다운로드가 가능 한데 현재 제공하는 버전은 Free Trial 과 구매 버전 밖에 없습니다.
https://wuinstall.com/

최신 Free trial 버전의 경우 일정 기간이 지나면 무료 이용이 불가능 합니다만 구글링을 조금해서 약간 오래 된 
Wuinstall 1.x 버전을 구하신다면 옵션에 제약이 있긴 하지만 기본적으로 업데이트를 search, download, install,reboot 하는 것이
가능 하니 굳이 최신 버전이 필요하지 않다면 조금의 구글링으로 이전 버전을 다운로드 후 테스트 해 보시기 바랍니다.

예전에는 아래 그림 처럼 Free 버전과 Pro버전으로 제공 되었는데 이게  Free Trial 버전과 구매 버전으로 바뀐 것 같습니다.


Wuinstall을 이용해서 Windows update를 작업 스케줄에 등록하여 업데이트의 설치 및 재 시작을 하는 상세 방법은 아래와 같습니다.

먼저 Wuinstall을 다운로드 받아 적당한 곳에 압축을 풉니다. 그럼 아래 그림에서 처럼 Wuinstall.exe 파일과 관련 문서 폴더가 있습니다. 



Wuisntall.exe파일을 적당한 곳에 옮겨 놓고 작업 스케줄 등록을 위한 스크립으를 만듭니다. Wuinsall의 이용 방법은
다운로드 받은 폴더의 docs를 이용하시면 됩니다.

cmd /c c:\tools\wuinstall\WUInstall.exe /install /reboot 10 >> c:\tools\wuinstall\insall.log 2>>&1

위 커멘드를 update.cmd로 저장합니다.

작업 스케줄을 실행하고 작업 스케줄을 실행할 계정과 권한을 적용하고 작업 스케줄 이름을 입력합니다.
만약 로그파일을 로컬이 아닌 원격 서버의 공유 폴더에 저장하고 싶을 경우에는 system 계정이 아닌 별도
계정을 적용하시면 됩니다만 해당 계정이 반드시 작업 스케줄이 실행되는 서버의 local admin 그룹에 포함 되어 있어야
Windows update가 가능 하니 참고 하시기 바랍니다.

Action탭에서 위에서 만든 실행 할 스크립트를 선택후 적용합니다.

스크립트와 작업 스케줄에서 정상 등록하는지 실행을 해 봅니다.
이 부분은 주의가 필요한데 최소 스크립트를 만들 때 위 에서처럼 /install 옵션이 아닌 /search 옵션만
준다면 search만 하므로 테스트가 용이하니 참고 하십시오.

위 스크립트처럼 install까지 테스트가 필요하다면 반드시 테스트 환경에서^^


여튼 위 작업을 실행하게 되면 로그를 통해서를 wuinstall이 /insall과 /reboot 10 옵션으로 실행 된 것을 확인 할 수 
있습니다.

미리 적영 되어 있는 WSUS를 찾아서 자동으로 업데이트를 시작하고 업데이트의 설치가 완료되면 10초 후 시스템을
재 시작 합니다.



테스트가 잘 되었다면 Trigger를 통해서 점검과 같은 특정 시간에 예약 스케줄을 등록하고 업데이트를 진행하시면 됩니다.


참고로 작업 스케줄을 각 서버마다 등록하고 한대의 서버에서 파워셀로 해당 작업을 실행하는 커멘드를 실행하거나
혹은 Psexec를 이용해서 특정 서버에서 원격 서버의 Windowus update도 가능하니 자세한 내용은 메뉴얼을 참고 하시기 바랍니다.

고맙습니다.

[참고자료]
Wuinstall
https://wuinstall.com/

Automatically updating a new windows installation
https://www.experts-exchange.com/articles/6852/Automatically-updating-a-new-windows-installation-scripted.html


저작자 표시 비영리 변경 금지
신고

Comment 0

인터넷이 안되는 환경의 서버에서 Livekd를 이용한 Full dump 수집 방법

인터넷이 안되는 환경의 서버에서 간혹 LiveKD를 이용해서 메모리 덤프 수집을 해야 하는 경우가 간혹 있는데 예전에는 해당 머신과
동일 빌드 버전의 OS를 인터넷  환경에 설치하거나 인터넷이 연결 된 동일 환경 OS에서 Windbg 설치 후 LiveKD를 이용하여 심볼을
다운 받고 그 심볼을 인터넷이 안되는 환경에 복사 후 Livekd를 이용하여 Full dump를 수집 하였습니다.
그런데 인터넷이 안되는 환경과 인터넷이 되는 환경의 같은 OS도 빌드 버전이 보안 업데이트 설치 여부에 따라 달라지는 경우가 많아
같은 OS의 심볼을 받아도 LiveKD가 실행 되지 않는 경우가 다반사 였습니다.

최근 서버에서 online 중에 덤프 수집이 필요하여 여러번 삽집을 하면서 keyboard 나 NMI 혹은 notmyfault로 덤프 수집을 해야 하나
고민하다가 우연찮게...블로그를 발견해서.. 얼마나 고맙든지.. (오래 됬는데 왜 이제서야 알게 되었을까요? ㅎㅎ)

Livekd를 이용한 덤프 수집 방법은 http://ryuchan.kr/145 에 오래 전에 정리 해 두었었는데... windbg 파일 다운로드 링크는 업데이트가
좀 필요 하네요^^

여튼 방법은 이렇습니다.

먼저 LiveKD를 이용해서 덤프를 수집 할 인터넷이 안되는 환경의 서버에서 Kernel32.exe, Ntdll.dll, ntoskrnl.exe 파일을 복사하여
인터넷이 되는 PC에 복사를 합니다.
아래 예에서는 인터넷이 되는 제 PC에 D:\Testsymbols\system32 폴더를 만들고 온라인 덤프 수집이 필요한 서버의 해당 파일을 복사
하였습니다.


제 PC에는 Windows debugging tool이 설치 되어 있고 Livekd 또한 미리 복사 되어 있기 때문에 명령 프롬프트를 실행 후 해당 폴더로
이동을 합니다. 그리고 아래와 같은 명령어를 입력 합니다.

symchk /if d:\testsymbols\system32\*.* /s srv*d:\testsymbols*http://msdl.microsoft.com/download/symbols

명령어를 실행 하면 아래와 같이 tessymbols 폴더에 3개의 .pdb 폴더가 다운로드 됩니다.

제 PC에 다운로드 된 3개의 *.pdb 폴더를 인터넷이 안되는 덤프 수집이 필요한 서버에 복사합니다.
해당 서버에도 미리 Windows debugging tool설치하고 Livekd를 복사 해 놓았기 때문에 c:\testsysmbols라는 폴더에 해당 파일을 복사 하였습니다.

해당 서버에서 명령프롬프트를 실행하여 Windows debugging tool이 설치 된 , Livekd가 복사 된 폴더로 이동하여 Livekd.exe를 실행합니다.

정상적으로 라이브 커널 디버깅이 연결 된 것이 확인 됩니다. 이제 full dump 수집을 위해서 아래 명령어를 실행하고 덤프가 수집 되는 것을 확인 합니다. 

덤프 수집이 완료되면 q 명령어로 kernel debugging 연결을 끊고 수집 된 덤프를 분석 합니다.

[참고 자료]
Online Kernel Memory Dump using LiveKd.exe
https://blogs.technet.microsoft.com/carlh/2009/11/30/online-kernel-memory-dump-using-livekd-exe/


저작자 표시 비영리 변경 금지
신고

Comment 0

Windows Server 2012R2 로 구성 된 클러스터 된 파일 서버에서 Nonpaged Pool 사용률이 비 정상적으로 높아
어떤 녀석이 많은 메모리를 사용 중인지 확인 하기 위해서 Livekd를 이용해서 라이브 디버깅을 해 보았습니다. 

[환 경]
 OS : Fail Over Cluster File Server on Windows Server 2012R2

[증 상]
 Nonpaged Paginng Pool의 메모리 사용률이 비 정상적으로 높앞으며 시스템 프로세스가 사용하는 핸들 수 도 2만이 
 넘었음.


[확인 사항]

  • 파일 서버 이기 때문에 오픈 된 파일이나 연결 된 사용자 사세션이 많은 지 확인 해 보았으나 연결 된 세션이 많지 않았음
  • 각 노드의 TCP 커넥션 수 확인

  

원인 분석을 위해서
Windows debugging tool 설치 후 해당 설치 디렉터리에 Livekd 를 복사한다.

  

디버깅을 위한 심볼 Fix를 위해서

파일 서버에서 MS 심볼 서버로 접근 할 수 없기 때문에 로컬 컴퓨터(Windows 8.1)에서 widbg를 실행 후 덤프를 하나 열고
심볼을 받아서 해당 심볼 중 아래 두 폴더를 라이브 디브깅을 할 폴더로 복사한다.
 



분석을 진행 할 서버에서 명령 프롬프트를 이용해서 Windows debugging 폴더로 이동하여
Livekd -y c:\symbols 

명령어 입력 후
정상적으로 로컬 디비깅이 실행 되면 리소스 확인에 필요한 커멘드를 이용해서 리소스 사용률 확인
   

0: kd> !vm 4

*** Virtual Memory Usage ***

Physical Memory: 6288149 ( 25152596 Kb)
Page File: \??\C:\pagefile.sys
Current: 26214400 Kb Free Space: 25872832 Kb
Minimum: 26214400 Kb Maximum: 75497472 Kb
unable to get nt!MmSystemLockPagesCount
Error reading free nonpaged PTEs 0000000000000004
Available Pages: 1703176 ( 6812704 Kb)
ResAvail Pages: 2875193 ( 11500772 Kb)
Locked IO Pages: 0 ( 0 Kb)
Free System PTEs: 59377 ( 237508 Kb)
Free NP PTEs: 0 ( 0 Kb)
Modified Pages: 8080 ( 32320 Kb)
Modified PF Pages: 8089 ( 32356 Kb)
NonPagedPool 0 Used: 1455190 ( 5820760 Kb)
NonPagedPool 1 Used: 1651617 ( 6606468 Kb)
NonPagedPool Usage: 3250905 ( 13003620 Kb)
NonPagedPool Max: 4294967296 (17179869184 Kb)
PagedPool 0 Usage: 147291 ( 589164 Kb)
PagedPool 1 Usage: 42232 ( 168928 Kb)
PagedPool 2 Usage: 35308 ( 141232 Kb)
PagedPool Usage: 224831 ( 899324 Kb)
PagedPool Maximum: 4160749568 (16642998272 Kb)
Shared Commit: 348374 ( 1393496 Kb)
Special Pool: 0 ( 0 Kb)
Shared Process: 11828 ( 47312 Kb)
PagedPool Commit: 224941 ( 899764 Kb)
Driver Commit: 55834583195 (223338332780 Kb)
Committed pages: 4696802 ( 18787208 Kb)
Commit limit: 12841749 ( 51366996 Kb)

Nopaged Pool을 가장 많이 사용하는 top5 Pool tag 확인 

0: kd> !poolused /t5 2

Sorting by NonPaged Pool Consumed
Pool Used:
NonPaged Paged

Tag Allocs Used Allocs Used

MPP. 49781288 10354777664 0 0 UNKNOWN pooltag ' MPP', please update pooltag.txt
VoSm 3689 240181440 0 0 Bitmap allocations , Binary: volsnap.sys
Mdl 81341 170719024 0 0 Io, Mdls
ConT 387 140668928 0 0 UNKNOWN pooltag 'ConT', please update pooltag.txt
Cont 1112 106383968 0 0 Contiguous physical memory allocations for device dr
TOTAL 51007260 11496509728 604302 758159552


MPP 풀태그를 사용하는 시스템 드라이버 확인
   

C:\Windows\System32\drivers>findstr /l /m MPP *.sys

afd.sys
ClusDisk.sys
CsvFlt.sys
CsvFs.sys
ds4dsm.sys
ds4utm.sys
dxgkrnl.sys
FWPKCLNT.SYS
http.sys
mup.sys
ndis.sys
ndiswan.sys
pacer.sys
rassstp.sys
sdstor.sys
SerCx.sys... 등등


대부 분 MS에서 제공하는 드라이브 이나 Ds4dsm.sys와 Ds4utm.sys만 IBM 에서 제공한 모듈로 해당 모듈의 최신 버전 확인 필요
추가로 서치를 좀 해보니 해당 모듈에서 메모리 릭이 발생 한 사례가 있네요.

http://www-01.ibm.com/support/docview.wss?uid=ssg1S1005069


[참고자료]

http://ryuchan.kr/145

http://ryuchan.kr/344

http://blogs.technet.com/b/askperf/archive/2011/09/23/getting-to-know-the-mmst-pool-tag.aspx

https://windowsarchitecture.wordpress.com/2015/01/12/windows-2012-r2-poolmon/

   

   

   

  

신고

Comment 0

Domain admin 패스워드 리셋 방법 

ERD 커멘드를 이용해서 로컬 admin의 패스워드를 리셋 하는 것은 알고 있었고 실제로 몇 번 변경을 해봤습니다만 
도메인 admin의 패스워드를 변경 할 수 있는 방법은 없는 것으로 알고 있었는데.. 그게 아니었네요.
지인(?)이 운영하는 회사의 AD+ SQL cluster 2대 구성 된 서버의 domain admin 패스워드가 분실 되 도움을 요청하여
방법을 찾다가 보니 아래와 같이 아주 쉽게 domain admin의 패스워드 리셋이 가능 하더군요..

방법은 아래와 같습니다.

먼저 Window Server 2008 R2 설치 CD를 이용해서 서버를 부팅하여 부팅 중 아래와 같은 화면이 나오면
Repair your computer를 클릭 합니다.

 시스템 복구 옵션 팝업창에서 현재 서버의 OS와 Disk가 선택 된 것을 확인하고 다음을 클릭합니다.

 시스템 복구 옵션 화면에서 명령 프롬프트를 클릭 합니다.

명령 프롬프트가 시작 되면 기존 OS가 로드 된 D: 드라이브로 이동하여 아래의 명령어를 실행하여 utilman.exe 파일을 백업 합니다..
move d:\windows\system32\utilman.exe d:\windows\system32\utilman.exe.bak

Umtiman.exe 파일의 백업이 완료 되면 아래의 명령어를 실행하여 Cmd.exe를 utilman.exe로 copy 합니다. 
Copy d:\windows\system32\CMD.exe d:\windows\system32\utilman.exe

 카피가 완료 되면 시스템을 재 시작 합니다.

 시스템이 재 시작 되면 로그온 화면에서 아래 접근성 아이콘을 클릭 합니다.

접근성 아이콘 클릭 시 명령 프롬프트가 실행 되면 net user 명령어를 이용하여 Domain admin의 패스워드를 변경 합니다.

 

패스워드 변경이 완료 되면 로그온 화면에서 Ctntrl+Alt+Del 를 실행 후 변경 된 패스워드로 로그온을 합니다.

 로그온이 완료 되면 C:\windows\system32폴더로 이동하여 utilman.exe를 삭제 합니다.

그리고 utilman.exe.bak를 원래 이름인 utilman.exe로 변경 합니다.

만약 utilman.exe.bak의 이름 변경시 권한 문제로 변경 할 수 없다는 메시지가 팝업 된다면 설치 CD로 부팅 후 복원 모드에서 파일 이름을 변경 하시기 바랍니다.

   

 이름 변경 시 권한이 없다는 메시지 발생시 설치 CD로 부팅 후 복원 모드에서 파일 네임을 변경 하시면 됩니다.

감사합니다.

[참고자료]
ERD Commander를 이용한 패스워드 복구 방법
http://ryuchan.kr/55

http://www.bursky.net/index.php/2012/04/reset-domain-administrator-password-windows-server-2008/

http://www.howtogeek.com/106333/how-to-reset-your-forgotten-domain-admin-password-on-server-2008-r2/

 

신고

Comment 0

이런저런 테스트를 위해서 Hyper-V 호스트에 가상 머신을 운영하기 위해서 MS 다운로드 센터를 통해서 VHD를 다운받아서 가상 머신을 생성하는데.... 정품 인증을 받지 않을 경우 한 시간에 한번씩 아래와 같은 메시지와 함께 가상 머신이 종료 된다는 것입니다.
매우 불편하지요.. 뭔가 집중해서 하고 하고 있는데 매 시간마다 가상머신이 종료 되니 말입니다.

물론 가상 머신을 ISO나 CD를 통해서 설치하고 정품 인증을 받을 수 있다면 아무런 문제가 되지 않겠지만 테스트 목적으로 단 기간 사용할 경우 그리고 빠른 설치가 필요 할 경우에는 VHD 파일을 다운 받아야 하니.......^^




한 시간에 한 번씩 WLMS 이벤트를 발생시키고 시스템을 종료 시키는 서비스를 찾아 강제로 종료도 해보았습니다.VM이 실행 된 후 해당 서비스의 프로세스를 강제로 종료 시켰더니 OS가 정상적으로 동작을 하지 않는 현상이.....-______--;

그래서 좀더 Search를 해 보니 생각보다 쉬운 방법으로 VM이 한 시간에 한 번씩 종료 되는 것을 막을 수 있더군요^^

바로 ERD command를 이용해 시스템을 부팅 후 DART (WLMS 서비스를 사용하지 않음으로 변경 한 후 재 시작 하는 것입니다.
Windows Evaluation
버전에서 실행 되는 WLMS.exe System Trusted Installer Full권한을 가지고 있고 시스템이 시작 될 때 자동으로 시작 되며 services.msc를 통해서 서비스를 중지 할수 없습니다.
또한 레지스트리의 권한도 변경이 되지 않습니다.

그렇기 때문에 해당 머신을 다른 ERD command와 같은 복구 프로그램을 이용해서 부팅 한 후 해당 해당 VM의 레지스트리를 수정 하면 간단하게게 해결 할 수 있습니다.

ERD Command
를 구할 수 없다면 MDOP에 포함 된 Microsoft Diagnostics and Recovery Toolset를 이용해서 부팅 이미지를  만들어 아래와 동일하게 레지스트리를 수정 하시면 됩니다.

아래 방법은 ERD Commander를 이용해서 레지스트르릴 변경 하는 방법이니 참고 하시기 바랍니다.

 

 

 

 

 

   

 

 

 

   

 

감사합니다.

[참고자료]
Overview of Microsoft Diagnostics and Recovery Toolset
http://technet.microsoft.com/en-us/library/ee532075.aspx

http://social.technet.microsoft.com/Forums/en-US/winserversetup/thread/77d68d0d-be7e-4721-85d0-9db8fffa3568

신고

Comment 0

Windows update 적용 후 시스템은 바로 시작해야 한다는 당연히 생각은 했지만 왜 그래야 하는지 조금은 더 이유를 알수 있게 되었네용.....^^

MailBag: Should Servers Be Restarted As Soon As Possible After Updates Or Okay To Wait?
http://blogs.technet.com/b/askpfeplat/archive/2013/01/25/mailbag-should-servers-be-restarted-as-soon-as-possible-after-updates-or-okay-to-wait.aspx

If you suppress a restart after applying an update, then the update is not completely in place.   If this update were a security update, the system would remain vulnerable until the restart and completion of the update after boot.  How long should the restart be suppressed?  How long should a system remain vulnerable? 

In theory, you could apply updates, suppress the reboot, and wait an infinite period of time
However, the longer the restart suppression, the higher the chance that unpredictable things could happen…especially if we’re talking about multiple updates.  While suppressing a restart, there is no guarantee that there won’t be side effects based on what changes were applied and those that remain pending.  At least, I’m not aware of any. I certainly have observed system hangs or other odd behavior with systems of my customers when they’ve suppressed restarts.  However, I’ve seen these issues less with Windows Server 2008 and later as compared to Windows Server 2003 or older versions.  The moral of the story here is to restart as soon as you can after updates or changes that require it. 

Windows Update and Automatic Reboots
http://blogs.technet.com/b/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx

감사합니다.

저작자 표시 비영리 변경 금지
신고

Comment 0

 

Tasklist /svc /FI "imagename eq svchost.exe"

 

sc config Schedule type= own

 

 

sc config Schedule type= share

 

 

감사합니다.

[참고 자료]
How to troubleshoot Service Host (svchost.exe) related problems?
http://blogs.technet.com/b/yongrhee/archive/2012/06/28/how-to-troubleshoot-service-host-svchost-exe-related-problems.aspx

 

저작자 표시 비영리 변경 금지
신고

Comment 0

Widows server 2003 환경에서는 메모리 덤프가 수집 되기 위해서는 반드시 Paging 파일이 필요하다. 그런데 가끔 시스템을 보면 해당 시스템이 두개의 파티션 즉 C 와 D가 있는데 D 드라이브에 Windows 폴더가 있는 경우가 있습니다.
일반적인 경우라면  C 드라이브에 Windows 폴더가 위치 하겠지만 멀티 부팅이나 다른 이유 들로 C가 아닌 D 드라이브에 Windows 폴더가 위치 할 수 있겠죠?

여튼 이런 경우에는 메모리 덤프 수집을 위한 페이징 파일은 어디에 만들어야 하는 걸까? Ntldr이나 boot.ini가 있는 시스템 파티션인 C 드라브에 만들어야 할까? 아니면 Windows 폴더가 위치한 D 드라이브에 만들어야 할 까요?
물론 디스크에 여유 공간이 충분해 두 군데 다 페이징 파일을 만들 수도 있겠지만.... 용량이 충분치 않은 상황이라면..

아래 kb를 보면 그 답을 알 수 있습니다.
http://support.microsoft.com/kb/254649/en-us

you must have a paging file on the boot volume that is sufficient to hold all the physical RAM plus 1 megabyte (MB).

페이징 파일이 반드시 Boot volume(부트 볼륨)에 위치 해야합니다. 시스템에 볼륨에 위치 할 경우 덤프가 생성 되지 않습니다.

부트 볼륨과 시스템 볼륨의 정의에 대해서는 아래 KB를 참고 하길 바랍니다.

Definitions for system volume and boot volume
http://support.microsoft.com/kb/314470/en-us

시스템 파티션
시스템 파티션은 Windows를 시작하는 데 필요한 하드웨어 관련 파일(예: Ntldr, Boot.ini 및 Ntdetect.com)이 포함된 디스크 볼륨을 말합니다.
참고: 동적 디스크에서는 이것을 "시스템 볼륨"이라고 합니다.
Intel 186 이상의 컴퓨터("x86" 계열만 해당)에서는 시스템 파티션이 활성으로 표시된 주 파티션이어야 합니다. x86 계열의 lntel 컴퓨터에서 시스템 파티션은 항상 드라이브 0입니다. 이 드라이브는 운영 체제가 시작될 때 시스템 BIOS가 검색하는 드라이브입니다.
필수 사항은 아니지만 시스템 파티션과 부팅 파티션이 동일할 수 있습니다.

부팅 파티션
부팅 파티션은 Windows 운영 체제 파일(기본적으로 WINDOWS 폴더에 있음) 및 지원 파일(기본적으로 WINDOWS\System32 폴더에 있음)이 포함된 디스크 볼륨을 말합니다.
동적 디스크에서는 이것을 "부팅 볼륨"이라고 합니다.
필수 사항은 아니지만 부팅 파티션과 시스템 파티션이 동일할 수 있습니다.
시스템 파티션은 하나뿐이지만 다중 부팅 시스템에서는 부팅 파티션이 각 운영 체제별로 있습니다.

참고로 Windows Vista 이후 버전 부터는 DedicateDumpFile이라는 레지스트리를 이용해서 부트 파티션이 아닌 용량이 충분한 로컬 디스크(SAN 스토리지는 안됨)라면 어떤 드라이브에서라도  덤프를 생성 할 수 있다.
DedicatedDumpFile 을 사용하는 방법
http://ryuchan.kr/90

그리고 추가로 Windows 7과 8 클라이언트 머신에서는 덤프 생성 알고리즘이 변경 되어 아래와 같은 경우에는 덤프가 생성되지 않을수 있으며 덤프를 생성하기 위해서는 AlwaysKeepMemoryDump 값을 레지스트리에 추가 하셔야 합니다.

Algorithm to decide whether to store/delete memory.dmp file generated after a system crash:

a.First report the kernel fault to the Online Crash Analysis Service.
b.Then, if machine has a registry setting AlwaysKeepMemoryDump set to 1, store the dump file on disk.
c.Else, if machine is a Windows Server SKU, store the dump file on disk.
d.Else, if the machine is joined to a domain (i.e. this is a corporate machine), store the dump file on disk.
e.Else, if machine is not on a domain (i.e. this is a home user’s machine),
If free disk space is >= 25GB, store the dump file on disk.
Else (free disk space is < 25 GB), delete the dump file.

The exact location of the AlwaysKeepMemoryDump setting in the registry is:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
AlwaysKeepMemoryDump Type: REG_DWORD  1 (hex)


감사합니다.

[참고 자료]
Definitions for system volume and boot volume
http://support.microsoft.com/kb/314470/en-us

Overview of memory dump file options for Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2
http://support.microsoft.com/kb/254649/en-us

No kernel memory dump created on Windows 7 or Windows
http://blogs.msdn.com/b/wer/archive/2009/02/09/kernel-dump-storage-and-clean-up-behavior-in-windows-7.aspx

저작자 표시 비영리 변경 금지
신고

Comment 0

32bit Windows OS에서 실행 중인 프로세스가 사용 할 수 있는 최대 메모리는 2G입니다.그러나 간혹 /3gb나 /userva 옵션을 사용하여 프로스세가 사용 할 수 있는 메모리를 2~3G까지 설정하는데 실제 프로세스가 그런 옵션들을 설정 했을 경우 정상적으로 OS로부터 메모리를 할당 받는지 확인 해 보았습니다.

1년전에 고갱님들께 전달 했던 내용인데 오늘 다른 곳에서 문의가 있어서 다시 정리 해 봅니다.

/3GB 매개 변수 란?
32비트 버전의 Windows에서 /3GB 매개 변수는 사용자 모드 가상 주소 공간을 3GB로 확장하고 커널 모드 구성 요소를 나머지 1GB로 제한하는 4GB(기가바이트) RAM 조정 기능을 활성화합니다.

Windows 32비트 운영 체제의 가상 메모리
4GB RAM(Random Access Memory) 조정 기능과 PAE(Physical Address Extension) 매개 변수가 메모리 할당을 변경하는 방식을 이해하기 전에 먼저 Windows 32비트 운영 체제에서 가상 메모리가 작동하는 방식을 살펴 보는 것이 도움이 됩니다. Windows 32비트 운영 체제에서 가상 메모리가 작동하는 방식에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
메모리 관리 101
http://blogs.technet.com/askperf/archive/2007/02/23/memory-management-101.aspx

[/3GB 옵션이 없는 경우]
아래 포스팅을 보면 boot.ini에서 3gb옵션을 설정하지 않을 경우 프로세스가 사용할 수 있는 메모리는 최대 2G이며 확인 할 수 있는 방법을 설명해 놓았습니다.

우선 3GB 옵션이 없는 경우 process 가 사용 가능한 최대 메모리는 2G 이며 testlimit이라는 프로세스에 2G 이상의 메모리를 할당 할 경우 사용 가능한 저장소가 부족하다는 메시지와 함께 정상적으로 프로그램이 실행 안됨을 확인 하였습니다.

최대 2028MB 까지 메모리를 사용 할 수 있습니다.

프로세스의 사용 가능한 최대 메모리 확인 방법
http://ryuchan.kr/277

/3bg가 없을 경우 위 포스팅에서 소개한 스크립트나 wmic 커멘드를 이용하면 프로세스가 사용할 수 있는 최대 메모리를 확인 할 수 있으며

 

sysinternals에서 제공하는 testlimit 이라는 유틸을 이용해서 해당 프로세스가 2G 넘는 메모리를 사용 하도록 설정 하면 "사용 가능한 저장소가 부족하여 이 명령을 처리 할 수 없다" 라는 메시지가 뜬다.

 

 

 

 

  

[/3GB, /USERVA=2500 설정 시]

boot.ini에  /3GB /Userva 옵션 할 당 후 tastlimit을 실행 할 경우 아래와 같이 2.2G 이상에서도 프로그램이 정상적으로 실행 중임을 확인 할 수 있습니다.


 

 

 

 

[참고 자료]
4GB RAM 조정 기능 및 실제 주소 확장(PAE) 매개 변수에 대한 설명
http://support.microsoft.com/kb/291988

/userva 스위치를 /3GB 스위치와 함께 사용해서 사용자 모드 공간을 2GB에서 3GB 사이의 값으로 조정하는 방법http://support.microsoft.com/kb/316739/ko

프로세스의 사용 가능한 최대 메모리 확인 방법
http://ryuchan.kr/277

감사합니다.

저작자 표시 비영리 변경 금지
신고

Comment 0