반응형
출처 : http://www.codeproject.com/Articles/31382/Memory-Leak-Detection-Using-Windbg


Detecting memory leaks using Windbg.

Introduction

Memory leak is a time consuming bug often created by C++ developers. Detection of memory leaks is often tedious. Things get worst if the code is not written by you, or if the code base is quite huge.

Though there are tools available in the market that will help you in memory leak detection, most of these tools are not free. I found Windbg as a freeware powerful tool to solve memory leak bugs. At least, we get an idea about the code location which might be suspected to cause memory leaks. COM Interface leaks are out of the scope of this article.

Windbg is a powerful user/kernel space debugger from Microsoft, which can be downloaded and installed from here.

Using Windbg

To start working with Windbg:

  1. Configure the symbol file path to the Microsoft symbol server “SRV*d:\symbols*http://msdl.microsoft.com/download/symbols”.
  2. Add your program EXE/DLL PDB (program database) path to the symbol file path.
  3. You also need to to configure the Operating System's flag to enable user stack trace for the process which has memory leaks. This is simple, and can be done with gflags.exe. Gflags.exe is installed during Windbg's installation. This can also be done through command line, using the command “gflags.exe /i MemoryLeak.exe +ust”. My program name is Test2.exe; hence, for the demo, I will be using Test2.exe rather than MemoryLeak.exe. The snapshot below shows the setting of OS flags for the application Test2.exe.

cmd.JPG

Once we have configured Windbg for the symbol file path, start the process which is leaking memory, and attach Windbg to it. The Attach option in Windbg is available under the File menu, or can be launched using the F6 shortcut. The snapshot below shows the same:

attach.JPG

The !heap command of Windbg is used to display heaps. !heap is well documented in the Windbg help.

I have developed a small program which leaks memory, and will demonstrate further using the same.

int _tmain(int argc, _TCHAR* argv[])
{   while(1) 
     { 
        AllocateMemory(); 
     } 
     return 0; 
} 
void AllocateMemory() 
{ 
     int* a = new int[2000]; 
     ZeroMemory(a, 8000); 
     Sleep(1); 
}

The above program leaks an integer array of size 2000*4 bytes.

After attaching Windbg to the process, execute the !heap –s command. -s stands for summary. Below is the output of the !heap -s for the leaking process:

0:001> !heap -s
NtGlobalFlag enables following debugging aids for new heaps:
    validate parameters
    stack back traces
  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 
                    (k)     (k)    (k)     (k) length      blocks cont. heap 
-----------------------------------------------------------------------------
   00150000 58000062    1024     12     12      1     1     1    0      0   L  
   00250000 58001062      64     24     24     15     1     1    0      0   L  
   00260000 58008060      64     12     12     10     1     1    0      0      
   00330000 58001062   64576  47404  47404     13     4     1    0      0  
-----------------------------------------------------------------------------

Let the process execute for some time, and then re-break in to the process, and execute !heap -s again. Shown below is the output of the command:

0:001> !heap -s
NtGlobalFlag enables following debugging aids for new heaps:
   validate parameters
   stack back traces
   Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 
                     (k)     (k)    (k)     (k) length      blocks cont. heap 
   -----------------------------------------------------------------------------
    00150000 58000062    1024     12     12      1     1     1    0      0   L  
    00250000 58001062      64     24     24     15     1     1    0      0   L  
    00260000 58008060      64     12     12     10     1     1    0      0      
    00330000 58001062  261184 239484 239484     14     4     1    0      0      
   -----------------------------------------------------------------------------

Lines marked in bold show the growing heap. The above snapshot shows a heap with the handle 00330000 growing.

Execute “!heap -stat –h 00330000” for the growing heap. This command shows the heap statistics for the growing heap. Shown below is the command's output.

0:001> !heap -stat -h 00330000
heap @ 00330000
group-by: TOTSIZE max-display: 20
    size     #blocks     total     ( %) (percent of total busy bytes)
    1f64 76c6 - e905f58  (99.99)
    1800 1 - 1800  (0.00)
    824 2 - 1048  (0.00)
    238 2 - 470  (0.00)
    244 1 - 244  (0.00)
    4c 5 - 17c  (0.00)
    b0 2 - 160  (0.00)
    86 2 - 10c  (0.00)
    50 3 - f0  (0.00)
    74 2 - e8  (0.00)
    38 4 - e0  (0.00)
    48 3 - d8  (0.00)
    c4 1 - c4  (0.00)
    62 2 - c4  (0.00)
    be 1 - be  (0.00)
    b8 1 - b8  (0.00)
    ae 1 - ae  (0.00)
    ac 1 - ac  (0.00)
    55 2 - aa  (0.00)
    a4 1 - a4  (0.00)

The above snapshot shows 0x76c6 blocks of size 1f64 being allocated (marked in bold). Such a huge number of blocks of the same size makes us suspect that these can be leaked blocks. Rest of the block allocations do not have growing block numbers.

The next step is to get the address of these blocks. Use the command !heap -flt s 1f64. This command filters all other blocks of heap and displays the details of blocks having size 1f64.

Shown below is the output for the command:

0:001> !heap -flt s 1f64
    _HEAP @ 150000
    _HEAP @ 250000
    _HEAP @ 260000
    _HEAP @ 330000
      HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state
        003360e0 03f0 0000  [07]   003360e8    01f64 - (busy)
        00338060 03f0 03f0  [07]   00338068    01f64 - (busy)
        00339fe0 03f0 03f0  [07]   00339fe8    01f64 - (busy)
        0033bf60 03f0 03f0  [07]   0033bf68    01f64 - (busy)
        0033dee0 03f0 03f0  [07]   0033dee8    01f64 - (busy)
        01420040 03f0 03f0  [07]   01420048    01f64 - (busy)
        01421fc0 03f0 03f0  [07]   01421fc8    01f64 - (busy)
        01423f40 03f0 03f0  [07]   01423f48    01f64 - (busy)
        01425ec0 03f0 03f0  [07]   01425ec8    01f64 - (busy)
        01427e40 03f0 03f0  [07]   01427e48    01f64 - (busy)
        01429dc0 03f0 03f0  [07]   01429dc8    01f64 - (busy)
        0142bd40 03f0 03f0  [07]   0142bd48    01f64 - (busy)
        0142dcc0 03f0 03f0  [07]   0142dcc8    01f64 - (busy)
        0142fc40 03f0 03f0  [07]   0142fc48    01f64 - (busy)
        01431bc0 03f0 03f0  [07]   01431bc8    01f64 - (busy)
        01433b40 03f0 03f0  [07]   01433b48    01f64 - (busy)
        01435ac0 03f0 03f0  [07]   01435ac8    01f64 - (busy)
        01437a40 03f0 03f0  [07]   01437a48    01f64 - (busy)
        014399c0 03f0 03f0  [07]   014399c8    01f64 - (busy)
        0143b940 03f0 03f0  [07]   0143b948    01f64 - (busy)
        0143d8c0 03f0 03f0  [07]   0143d8c8    01f64 - (busy)
        0143f840 03f0 03f0  [07]   0143f848    01f64 - (busy)
        014417c0 03f0 03f0  [07]   014417c8    01f64 - (busy)
        01443740 03f0 03f0  [07]   01443748    01f64 - (busy)
        014456c0 03f0 03f0  [07]   014456c8    01f64 - (busy)
        01447640 03f0 03f0  [07]   01447648    01f64 - (busy)
        014495c0 03f0 03f0  [07]   014495c8    01f64 - (busy)
        0144b540 03f0 03f0  [07]   0144b548    01f64 - (busy)
        0144d4c0 03f0 03f0  [07]   0144d4c8    01f64 - (busy)
        0144f440 03f0 03f0  [07]   0144f448    01f64 - (busy)
        014513c0 03f0 03f0  [07]   014513c8    01f64 - (busy)
        01453340 03f0 03f0  [07]   01453348    01f64 - (busy)
        014552c0 03f0 03f0  [07]   014552c8    01f64 - (busy)
        01457240 03f0 03f0  [07]   01457248    01f64 - (busy)
        014591c0 03f0 03f0  [07]   014591c8    01f64 - (busy)
        0145b140 03f0 03f0  [07]   0145b148    01f64 - (busy)
        0145d0c0 03f0 03f0  [07]   0145d0c8    01f64 - (busy)
        0145f040 03f0 03f0  [07]   0145f048    01f64 - (busy)
        01460fc0 03f0 03f0  [07]   01460fc8    01f64 - (busy)
        01462f40 03f0 03f0  [07]   01462f48    01f64 - (busy)
        01464ec0 03f0 03f0  [07]   01464ec8    01f64 - (busy)
        01466e40 03f0 03f0  [07]   01466e48    01f64 - (busy)
        01468dc0 03f0 03f0  [07]   01468dc8    01f64 - (busy)

Use any UsrPtr column value from the listed output, and then use the the command !heap -p -a UsrPtr to display the call stack for UsrPtr. I have selected 0143d8c8 marked in bold.

Upon execution of !heap -p -a 0143d8c8, we get the call stack shown below:

0:001> !heap -p -a 0143d8c8 
    address 0143d8c8 found in
    _HEAP @ 330000
      HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state
        0143d8c0 03f0 0000  [07]   0143d8c8    01f64 - (busy)
        Trace: 0025
        7c96d6dc ntdll!RtlDebugAllocateHeap+0x000000e1
        7c949d18 ntdll!RtlAllocateHeapSlowly+0x00000044
        7c91b298 ntdll!RtlAllocateHeap+0x00000e64
        102c103e MSVCR90D!_heap_alloc_base+0x0000005e
        102cfd76 MSVCR90D!_heap_alloc_dbg_impl+0x000001f6
        102cfb2f MSVCR90D!_nh_malloc_dbg_impl+0x0000001f
        102cfadc MSVCR90D!_nh_malloc_dbg+0x0000002c
        102db25b MSVCR90D!malloc+0x0000001b
        102bd691 MSVCR90D!operator new+0x00000011
        102bd71f MSVCR90D!operator new[]+0x0000000f
        4113d8 Test2!AllocateMemory+0x00000028
        41145c Test2!wmain+0x0000002c
        411a08 Test2!__tmainCRTStartup+0x000001a8
        41184f Test2!wmainCRTStartup+0x0000000f
        7c816fd7 kernel32!BaseProcessStart+0x00000023

The lines marked in bold shows the functions from our code.

Note: Sometimes, it might happen that the “!heap -s” command does not show a growing heap. In that case, use the “!heap -stat -h” command to list all the heaps with their sizes and number of blocks. Spot the growing number of blocks, and then use the “!heap –flt s SIZE” (SIZE = the size of the suspected block) command.


반응형

'UTIL > Debugging' 카테고리의 다른 글

Windows Wingdb를 이용한 MEMORY LEAK 대처법  (0) 2014.12.26
windbg 사용법 (WinDebug)  (0) 2014.05.26
gdb 사용법 안내  (0) 2012.08.01
dbx와 core 파일 분석 및 사용법  (0) 2012.08.01
반응형

출처 : http://darpangs.tistory.com/19

----------------------------------------------------------------------------------

참조 : http://www.codeproject.com/KB/cpp/MemoryLeak.aspx


1. gflags.exe 를 이용하여 메모리 할당 트레이싱 대상 프로그램을 세팅한다.
- gflags.exe /i MLeakTarget.exe +ust

: 프로세스 이름을 기준으로 트레이싱을 시작하는 듯.

2. WinDbg 를 이용해서 대상 프로세스에 attach 한다.
3. !heap -s  명령어를 입력한다.현재 사용 중인 heap 의 사용 내역이 보인다.

4. !heap -stat -h 00330000 명령어를 입력한다.
: 각 힙에 대한 핸들값을 마지막에 인자로 넣는다. ( 00330000 )
: 그러면 해당 힙의 사용 내역이 자세히 나온다.
: 위의 참조 글을 보면, 여기서 크기를 기준으로 필터링해서 다시 목록을 뽑고, 뽑아진 목록에서 해당 힙을 가리키는 유저모드 포인터 값이 나온다.
: 이 포인트 값을 이용해서 어떻게 할당된 메모리 인지 콜스택을 볼 수 있다. ( 이건 gflags.exe 에 의해 세팅되었기 때문에 가능하다. )

5. !heap -p -a 0x143fa303
: 이 명령을 입력하면, 인자로 넣어진 주소가 어떻게 allocation 되었는지 그 때의 콜 스택이 나오게된다.
: 적당한 디버깅 심벌들이 갖추어져 있다면, 어디서 할당된 놈인지 파악할 수 있을것이다.

6.. 원하는 주소값이 나온다면, ln 주소값  명령을 이용해서 해당되는 소스라인을 확보한다.
: ln 명령어 찾는다고 좀 헤멨음. ;;
----------------------------------------------------------------------------------------------
위의 참조 사이트에서 나오는 방법은 실제 필드에서는 저렇게 큰 메모리가 leak 되는 상황은 거의 없고, 실제로는 항상 작은 용량의 메모리 들이 leak 되기 때문에 별로 쓸모가 없다고 얘기가 나오고 있다.

뭐... 그럴수도 있을거 같고, 나의 경우엔...

현재 작업 중인 프로그램 코드내부에 메모리를 할당하고 해제하는 함수를 모조리 래핑해 놓은게 있다.

그래서 프로그램 종료 시에 할당되고 해제되지 않은 메모리의 주소값을 친절하게도 알려준다.

뭐 그 정도면 게임끝~ 위의 단계에서 바로 5번 단계의 명령어를 쓰면 필요한 콜 스택을 구할 수 있다.



--------------------------------------------------------------------------------------------

출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=03gwy&articleno=15700730


상용툴을 사용하지 않고 WinDBG를 활용한 힙영역 메모리 누수 탐지에 관한 내용이 코드프로젝트 사이트에 있어서 복습할 겸 글을 써보기로 했습니다.

 

1. WinDBG 실행후 PDB와 실행이미지 경로 세팅

   (실행파일은 계속적으로 메모리 누수가 일어나는 형태의 파일이어야 함. 간단한 소스를 만들면 됩니다)

2. 적당히 WinDbg로 실행하다가 브레이크를 건뒤 커맨드를 넣는다.

3. !heap -s 힙의 상태를 표시해줌

4. 다시 실행하고 적당히 시간이 지났을 때 브레이크 걸고 3번을 반복

5. 힙 핸들 중 이전에 비해 메모리 차지하는 비중이 큰 핸들 값을 조사

6 !heap -stat -h 12345678  12345678 핸들의 힙 상태를 보겠다는 의미

7. 이중에서 블럭 할당 값이 지나치게 많은 값이 메모리 누수 부분이라고 할 수 있겠습니다.

   블럭 사이즈가 많이 있으므로 의심되는 블럭 크기의 값만 보기 위해

8. !heap -flt s 1fd4   블럭 크기가 1fd4인 값만 필터링해서 보여달라는 의미

9. 그러면 1f4d 크기로 할당된 리스트들이 가득 나옵니다. 각 항목중에 usrptr 값이 있습니다. 이 항목을 사용하면 이 값이 힙에 할당되기 까지의 스택 트레이스를 보여 줍니다.

10. !heap -p -a usrptr 


--------------------------------------------------------------------------------------------

출처 : http://www.duck.pe.kr/m/post/173


00400000 00413000 image00400000 C (no symbols)
71710000 71794000 comctl32 (deferred)
77980000 77a1b000 oleaut32 (deferred)
77de0000 77e49000 user32 (deferred)
77e50000 77f32000 kernel32 (deferred)
77f40000 77f7c000 GDI32 (deferred)
77f80000 77ffc000 ntdll (pdb symbols) c:\websymbols\ntdll.pdb\41AFDCD61\ntdll.pdb
786f0000 7875f000 RPCRT4 (deferred)
796d0000 79735000 ADVAPI32 (deferred)
7cf00000 7cfef000 ole32 (deferred)

- .help : 메타명령어 (.명령) 도움말

- .hh : DEBUGGER.CHM 명령 띄우기.

- ~ Thread 관련 명령

Threads can only be specified in user mode. In kernel mode, the tilde (~) refers to a processor.

Also note that many commands can be preceded by a thread symbol. For an explanation of a tilde (~) followed by a command, see the entry for the command itself.

Here are examples of the use of this command. The following command will display all threads:

0:001> ~

The following command will also display all threads:

0:001> ~*

The following command will display the currently active thread:

0:001> ~.

The following command will display the thread that originally caused the exception (or that was active when the debugger attached to the process):

0:001> ~#

The following command will display thread number 2:

0:001> ~2

Here is an example of the output of this command:

0:001> ~
0 id: 4dc.470 Suspend: 0 Teb 7ffde000 Unfrozen
. 1 id: 4dc.534 Suspend: 0 Teb 7ffdd000 Unfrozen
# 2 id: 4dc.5a8 Suspend: 0 Teb 7ffdc000 Unfrozen

On the first line of this example, 0 is the decimal thread number; 4DC is the hexadecimal process ID, 470 is the hexadecimal thread ID, 0x7FFDE000 is the address of the TEB, and Unfrozen is the thread status. The period (.) before thread 1 means this is the current thread. The number sign (#) before thread 2 means this thread was the one that originally caused the exception or it was ctive when the debugger attached to the rocess.

- LD : (load Symbols)

0:000> ld ole32
Symbols loaded for ole32
0:000> lm
start end module name
00400000 00413000 image00400000 C (no symbols)
71710000 71794000 comctl32 (deferred)
77980000 77a1b000 oleaut32 (deferred)
77de0000 77e49000 user32 (deferred)
77e50000 77f32000 kernel32 (deferred)
77f40000 77f7c000 GDI32 (deferred)
77f80000 77ffc000 ntdll (pdb symbols) c:\websymbols\ntdll.pdb\41AFDCD61\ntdll.pdb
786f0000 7875f000 RPCRT4 (deferred)
796d0000 79735000 ADVAPI32 (deferred)
7cf00000 7cfef000 ole32 (pdb symbols) c:\websymbols\ole32.pdb\42CABEE01\ole32.pdb
0:000> ld kernel32
Symbols loaded for kernel32
0:000> lm
start end module name
00400000 00413000 image00400000 C (no symbols)
71710000 71794000 comctl32 (deferred)
77980000 77a1b000 oleaut32 (deferred)
77de0000 77e49000 user32 (deferred)
77e50000 77f32000 kernel32 (pdb symbols) c:\websymbols\kernel32.pdb\4498D8981\kernel32.pdb
77f40000 77f7c000 GDI32 (deferred)
77f80000 77ffc000 ntdll (pdb symbols) c:\websymbols\ntdll.pdb\41AFDCD61\ntdll.pdb
786f0000 7875f000 RPCRT4 (deferred)
796d0000 79735000 ADVAPI32 (deferred)
7cf00000 7cfef000 ole32 (pdb symbols) c:\websymbols\ole32.pdb\42CABEE01\ole32.pdb
0:000> ld *
Symbols already loaded for image00400000
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINNT\system32\comctl32.dll -
Symbols loaded for comctl32
Symbols loaded for oleaut32
Symbols loaded for user32
Symbols already loaded for kernel32
Symbols loaded for GDI32
Symbols already loaded for ntdll
Symbols loaded for RPCRT4
Symbols loaded for ADVAPI32
Symbols already loaded for ole32
0:000> lm
start end module name
00400000 00413000 image00400000 C (no symbols)
71710000 71794000 comctl32 (export symbols) C:\WINNT\system32\comctl32.dll
77980000 77a1b000 oleaut32 (pdb symbols) c:\websymbols\oleaut32.pdb\3DF8FF78\oleaut32.pdb
77de0000 77e49000 user32 (pdb symbols) c:\websymbols\user32.pdb\4211D1FD1\user32.pdb
77e50000 77f32000 kernel32 (pdb symbols) c:\websymbols\kernel32.pdb\4498D8981\kernel32.pdb
77f40000 77f7c000 GDI32 (pdb symbols) c:\websymbols\gdi32.pdb\43B3D6741\gdi32.pdb
77f80000 77ffc000 ntdll (pdb symbols) c:\websymbols\ntdll.pdb\41AFDCD61\ntdll.pdb
786f0000 7875f000 RPCRT4 (pdb symbols) c:\websymbols\rpcrt4.pdb\41E6468F7\rpcrt4.pdb
796d0000 79735000 ADVAPI32 (pdb symbols) c:\websymbols\advapi32.pdb\4253BAFE1\advapi32.pdb
7cf00000 7cfef000 ole32 (pdb symbols) c:\websymbols\ole32.pdb\42CABEE01\ole32.pdb


심볼에 대한 자세한 정보를 얻고자 하는 경우
0:000> lm v m gdi32
start end module name
77f40000 77f7c000 GDI32 (pdb symbols) c:\websymbols\gdi32.pdb\43B3D6741\gdi32.pdb
Loaded symbol image file: c:\websymbols\gdi32.dbg\43B3E1B73c000\gdi32.dbg
Image path: C:\WINNT\system32\GDI32.dll
Image name: GDI32.dll
Timestamp: Thu Dec 29 22:16:39 2005 (43B3E1B7)
CheckSum: 0003E315
ImageSize: 0003C000
File version: 5.0.2195.7073
Product version: 5.0.2195.7073
File flags: 0 (Mask 3F)
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft(R) Windows (R) 2000 Operating System
InternalName: gdi32
OriginalFilename: gdi32
ProductVersion: 5.00.2195.7073
FileVersion: 5.00.2195.7073
FileDescription: GDI Client DLL
LegalCopyright: Copyright (C) Microsoft Corp. 1981-1999


심볼서버

To use the Microsoft Symbol Server

1. Make sure you have installed the latest version of Debugging Tools for Windows.

2. Start a debugging session.

3. Decide where to store the downloaded symbols (the "downstream store"). This can be a local drive or a UNC path.

4. Set the debugger symbol path as follows, substituting your downstream store path for DownstreamStore.

SRV*DownstreamStore*http://msdl.microsoft.com/download/symbols

) SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols

장애의종류

Crash: Heap Corrupt, AV(Access Violation)

Hang: Deal lock, Orphaned thread, contention..

Leak: Memory Leak

장애 종류에 따른 대처

Crash:

Access Violation

- adplus.vbs > CDB 사용

- Tlist process id확인 (id)

- Adplus.vbs –crash –p pid : Crash 발생하면 메모리 덤프를 생성

Heap Corrupt

- page heap: heap영역에 할당된 메모리의 영역을 체크함. 범위를 초과하는 경우 프로세스를 종료시킴.

- gflags.exe 성능을 떨어뜨릴 있으면 덤프를 뜨고나면 disable 시켜야 한다.

http://support.microsoft.com/kb/286470/ : 마이크로 소프트의 페이지

시스템 범위 페이지 힙에 GFlags 사용

GFlags 도구는 시스템 범위 페이지 힙을 설정하는 사용됩니다. GFlags 명령을 적용하려면 명령을 실행한 컴퓨터를 다시 시작해야 합니다.

시스템 범위 일반 페이지 힙을 설정하려면 다음과 같이 하십시오. 1. 명령줄에 다음을 입력합니다.

gflags -r +hpa

2. 컴퓨터를 다시 시작합니다.

시스템 범위 일반 페이지 힙을 해제하려면 다음과 같이 하십시오. 1. 명령줄에 다음을 입력합니다.

gflags -r -hpa

2. 컴퓨터를 다시 시작합니다.

단일 프로세스 페이지 힙에 GFlags 사용

특정 프로세스를 모니터링하기 위해 페이지 힙을 사용할 있도록 설정할 있습니다. 이렇게 하려면 다음 단계를 수행하십시오.

1. 명령 프롬프트에서 디버그 도구를 설치한 디렉터리로 변경합니다.

2. 명령 프롬프트에서 다음을 입력한 Enter 키를 누릅니다.

Gflags.exe –p /enable lsass.exe

참고 lsass.exe Pageheap 도구로 모니터링할 프로세스의 이름을 나타냅니다.

3. 페이지 모니터링이 이상 필요하지 않으면 모니터링을 해제합니다. 수신 대기 포트의 목록을 얻으려면 프롬프트에서 다음 명령을 입력하고 Enter 키를 누릅니다.

Gflags.exe -p /disable lsass.exe

참고 lsass.exe Pageheap 도구로 모니터링할 프로세스의 이름을 나타냅니다.

4. 현재 Pageheap 확인을 사용하는 모든 프로그램을 표시하려면 명령 프롬프트에서 다음을 입력한 다음 Enter 키를 누릅니다.

Gflags.exe –p

* Hang 장애

Deadlock, 무한 루프(while(true){ … } )등의 로직 관련 문제.

- Hang dump 받는다. Hang dump 이상 받아서 체크하도록 한다.

Adplus.vbs –hang –p pid(process id)

- Deallock이나 lock 문제가 되는 경우에는 Windbg !lock 통해서 현재 lock 가장 많이 잡고 있는 Thread등을 조사하여 본다.

* 메모리 누수

Windows 2000/XP, 2003 이상의 경우

- DebugDiag라는 메모리 누수 감지 공개소프트웨어를 사용하고, perfmon(성능 모니터)에서 process private bytes, virtual Bytes 살펴보아서 private bytes 지속적인 증가, virtual Bytes 계단식 증가를 살펴보도록 한다.

반응형

'UTIL > Debugging' 카테고리의 다른 글

Windbg를 이용한 메모리 릭 검사(영문)  (0) 2014.12.26
windbg 사용법 (WinDebug)  (0) 2014.05.26
gdb 사용법 안내  (0) 2012.08.01
dbx와 core 파일 분석 및 사용법  (0) 2012.08.01
반응형



출처 : http://salm.pe.kr/183




시스템에 설치된 DLL 파일을 찾으려면 시작 단추를 클릭하여 검색을 하면 됩니다. 그런데 현재 사용하고 있는 DLL 파일을 찾으려면 어떻게 해야 할까요? 아, 유틸리티를 사용하면 된다고요? 물론 프로세스 익스플로러라는 걸출한 유틸리티가 있기는 합니다. 그런데 너무 자세해서 오히려 사용하기 불편할 때가 있지요.
이럴 때는 시스템 정보라는 유틸리티를 사용하면 됩니다. 이것은 윈도에 기본으로 포함되어 있는 툴입니다.

시스템 정보 실행하기

시스템 정보(msinfo32)는 어떻게 실행하는가? 이 시스템 정보를 찾으려고 해도 찾을 수가 없다는 사람이 있습니다.

우선 시작 단추에서 실행을 클릭합니다.

실행을 클릭

실행을 클릭


msinfo32를 입력하고 엔터 (또는 확인 단추를 클릭)

msinfo32를 입력하고 엔터 (또는 확인 단추를 클릭)

위와 같이 하면 아래와 같은 시스템 정보 프로그램이 실행됩니다. 이때 시작 단추 > 프로그램 > 보조 프로그램 > 시스템 도구 > 시스템 정보를 클릭하셔도 됩니다.

처음 실행하면 위와 같이 시스템 정보를 새로 읽어 옵니다.

처음 실행하면 위와 같이 시스템 정보를 새로 읽어 옵니다.

시스템 정보를 새로 고치는 시간이 조금 오래 걸릴 수도 있습니다. 보통은 5분 안에 끝납니다. msinfo32 프로그램은 그 성능은 여느 프로그램만큼 하지만, 이 "정보를 새로 고치는 중"이라는 메시지는 정말 짜증 나게 합니다. 어떤 사람은 이게 너무 오래 걸려서 쓰지 못하겠다는 사람도 있습니다.

시스템 요약 정보를 보여주는 모습

시스템 요약 정보를 보여주는 모습

시스템 정보를 읽어오면 맨 처음에는 당연히 시스템 요약 정보를 보여줍니다. 시스템 정보 프로그램을 실행하면 맨 처음에는 왼쪽 창에서 시스템 요약 부분을 선택한 상태이기 때문입니다.

소프트웨어 환경을 클릭하여, 그 하위에 있는 로드된 모듈을 클릭하면, 또 다시 시스템 정보를 다시 읽어 옵니다. 이때 모듈은 반드시 DLL 파일만 있는 것이 아닙니다. 흔히 사용하는 코덱 파일(.ax) 등도 모듈에 해당합니다.

로드된 모듈을 읽어오는 중

로드된 모듈을 읽어오는 중

역시 잠시 기다리시면 됩니다.

로드된 모듈 목록

로드된 모듈 목록


찾을 내용에 찾을 모듈 이름을 입력하고 나서 [찾기]를 클릭합니다.

찾을 내용에 찾을 모듈 이름을 입력하고 나서 [찾기]를 클릭합니다.


입력된 찾을 내용을 찾는 중

입력된 찾을 내용을 찾는 중


찾게 되면 그 위치로 이동해 줍니다.

찾게 되면 그 위치로 이동해 줍니다.

이때 자세한 정보를 보면 아래와 같습니다. 이름이나 버전은 물론이고, 크기날짜, 제조업체, 하드디스크 경로 등도 나타내 줍니다.

찾은 대상이 하나인 경우

찾은 대상이 하나인 경우


찾은 대상이 여럿인 경우

찾은 대상이 여럿인 경우 (다른 컴퓨터)

이때 로드된 모듈의 이름이 같은 여러 개를 찾을 수도 있습니다. 이때 같은 경로에 존재한다면 오직 하나의 파일만 찾지만, 여러 경로에서 발견되면 서로 다른 모듈로 판단하여 여러 개를 찾아 줍니다. 위에서도 여러 개의 usp10 모듈이 존재함을 알 수 있습니다.

추가 정보

이 프로그램은 컴퓨터에 설치한 모듈을 찾아주는 프로그램이 아닙니다. 그러므로 컴퓨터에 설치되어 있더라도 현재 그 모듈을 사용하고 있지 않다면 찾아 주지 않습니다.

반응형
반응형



출처 : http://sksstar.tistory.com/42





○ 마운트의 정의
파일시스템 구조 내에 있는 일련의 파일들을 사용자나 사용자 그룹들이 이용할 수 있도록 만드는 것
논리적으로 디스크와 디렉토리를 붙이는 것. (로컬 자원, 원격 자원 모두 마운트 가능)
시스템이나 사용자가 사용하지 않는 자원은 언마운트.



● /usr/sbin/mount
현재 마운트된 파일시스템 목록 표시
파일시스템을 마운팅할 때 사용
/etc/mnttab에 마운트포인트 추가
/etc/vfstab에 설정하면 시스템이 부팅시에 파일시스템 마운트. (리눅스는 /etc/fstab)

mount {-F fstype} {-o options} device_name mount_point

-F : 파일시스템 지정
-o : 옵션 사용시 지정

○ 옵션 종류

default option other options
-F ufs hsfs, pcfs, nfs
-o read/write ro
-o setuid nosetuid
-o logging nologging
-o largefiles nolargefiles
-o onerror=panic lock, umount




● /usr/sbin/mountall
시스템 부팅시에 /etc/vfstab 파일 read
mountall 명령 실행 시 /etc/vfstab 파일을 읽고 마운트 안되어 있는 것들을 모조리 마운트 시킴.

mountall {option}




● /usr/sbin/umount
파일시스템의 마운트 포인트를 제거
/etc/mnttab에 entry 삭제
/etc/mnttab에서 마운트 포인트를 참조하여 제거

umount {-f} [mount_point | device_name]

-f : 강제적으로 파일시스템 언마운트



● /usr/sbin/umountall
시스템 shutdown시에 /etc/mnttab 파일 read
umountall 명령 실행 시 /etc/mnttab 파일을 읽고 마운트 되어 있는 것들을 모조리 언마운트 시킴.
(단, vfstab에서 정의된 /, /usr, /proc, /dev/fd, /var, /var/run, /tmp는 제외)

umountall {option}

-r : remote 파일시스템만 언마운트



상식적으로 파일시스템이 사용 중일때는 unmount할 수 없다. 이 경우 "umount : file_system_name busy"라는 에러가 출력된다.
하지만, 파일시스템이 사용중일 때 unmount 해주는 명령어가 있다.


● fuser
파일시스템을 사용하고 있는 프로세스 표시 및 필요시 kill

# fuser -cu mount_point // 파일시스템 이름과 사용자 정보 표시
# fuser -ck mount_point // 파일시스템에 접근한 모든 프로세스 kill
# fuser -c mount_point
# fuser -fuk filename | directory
# umount mount_point


또는 위에서 보았던 umount -f 옵션을 주면 강제로 파일시스템을 unmount 한다.



■ /etc/mnttab
현재 마운트된 파일시스템 관리
마운트시 /etc/mnttab 파일에 entry 추가
언마운트시 /etc/mnttab 파일에서 entry 삭제
ASCII 파일이지만 관리자가 직접 관리할 수 없다. 커널이 직접 관리함.



■ /etc/vfstab
Virtual File System Table
부팅시에 자동으로 마운트 할 모든 파일시스템 저장
/etc/vfstab에 맵핑된 마운트 포인트는 관리자가 수동 마운트시에 사용할 수도 있다.



■ /etc/default/fs 와 /etc/dfs/fstypes

○ 마운트 명령 실행시 참조

mount {-F ufs} /dev/dsk/c0t0d0s7 /export/home
mount {-F nfs} unix200:/export/home /export/home

첫번째는 /etc/default/fs 파일 참조
두번째는 /etc/dfs/fstypes 파일 참조

○ /etc/default/fs
Default Local file system
위 파일의 내용 중 LOCAL=ufs 줄이 기본값 지정 부분임.

○ /etc/dfs/fstypes
Default Remote file system
위 파일의 내용 중 nfs NFS Utilities 부분이 기본값 지정 부분임.

○ 파일시스템 타입 찾기

# grep /export/home /etc/vfstab




■ /var/run
솔라리스8에서 추가된 tmpfs type의 파일시스템
보안적인 이유로 소유자는 루트.
쉽게 말해서 임시 디렉토리라고 생각하면 된다.
루트는 /var/run을 사용하고, 일반 사용자는 /tmp를 사용함.

반응형
반응형

작성자 : 박상수
작성일자 : 2010.12.03
작업환경 : VMware7 [ Solaris 9 ]
참고자료 : 서진수 샘




출처 : http://estenpark.tistory.com/266



굉장한 꿀자료... 감사합니다.



1. Slice(parttion) 개요

- Cylinder의 그룹
- 0~7번 Slices로 구성
- Slice 2는 전체 Disk를 표현(수정불가)
* Cylinder의 총개수
- Benefit
* Data의 조직화
* File Access 속도 감소
* I/O performance 향상

2. Disk Slice Naming Convention



3. 리부팅 하지 않고 Hard 추가 방법

[설명] Solaris에서 인식한 하드 확인
[root@calmmass:/]
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0d0 <DEFAULT cyl 44381 alt 2 hd 15 sec 63>
/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
Specify disk (enter its number): ^D

[설명] 하드디스크 추가 합니다. VMware에서 하드를 2기가 추가하도록 하겠습니다. 아래 그림과 같이 수행 하시면 됩니다.

[설명] 명령어를 이용하여 장치를 인식하게 합니다. 보통의 경우 아래와 같이 명령어를 사용하여 인식하게 하는 방법을 많이 쓴다고 합니다. 재부팅 하게 되면 DB 서버나 WAS 서버를 모두 종료 후 내려야 하기 때문입니다.
[root@calmmass:/]
# devfsadm

[설명] 원래는 0번 하드디스크만 있었지만 devfsadm 명령어를 수행하면 1번 하드디스크를 인식 시킬 수 있습니다.
추가한 디스크를 선택 합니다.(1)
[root@calmmass:/]
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0d0 <DEFAULT cyl 44381 alt 2 hd 15 sec 63>
/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
1. c2t0d0 <DEFAULT cyl 1021 alt 2 hd 128 sec 32>
/pci@0,0/pci15ad,1976@10/sd@0,0
Specify disk (enter its number): 1
[설명] Disk Slice name을 반드시 기억 하시기 바랍니다. /dev/dsk/ 디렉토리에 파일이 생성 됩니다.
selecting c2t0d0
.. 생략 ..

[설명] fdisk를 생성하지 않고 parttion을 하게 되면 에러가 발생 됩니다. 반드시 fdisk를 수행 후 parttion을 하시기 바랍니다.
format> fdisk
No fdisk table exists. The default partition for the disk is:
a 100% "SOLARIS System" partition
Type "y" to accept the default partition, otherwise type "n" to edit the
partition table.
y

[설명] part는 parttion의 약어로 사용 가능합니다.
format> part
.. 생략 ..

[설명] 0번 Slice를 선택 합니다.
partition> 0
[설명] 이부분은 파티션 id를 의미하며 가급적이면 설정 하지 마세요. Enter
Enter partition id tag[unassigned]:
[설명] wm(read/write mount), wu(read/write unmount), rm(read/only mount), ru(read/only unmount) 네 가지 종류가 있으며 기본적으로 설정되는 wm을 선택 하겠습니다. Enter
Enter partition permission flags[wm]:
[설명] 실린더의 번호를 넣습니다. 처음 시작하면 0부터 시작 하기때문에 Enter
Enter new starting cyl[0]:
[설명] 용량을 mb단위로 적습니다.
Enter partition size[0b, 0c, 0e, 0.00mb, 0.00gb]: 200mb
[설명] 파티셔닝을 한 내역을 보겠습니다.
partition> print
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 - 99 200.00MB (100/0/0) 409600
.. 생략 ..

[설명] 1번 Slice를 선택 하고 위와 동일합니다.
partition> 1
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
[설명] 굉장히 중요한 부분입니다. 이것은 Cylinders의 이전 번호 마지막 번호가 99라면 100을 설정 합니다.
Enter new starting cyl[0]: 100
Enter partition size[0b, 0c, 100e, 0.00mb, 0.00gb]: 300mb
partition> print
Part Tag Flag Cylinders Size Blocks
1 unassigned wm 100 - 249 300.00MB (150/0/0) 614400
.. 생략 ..

[설명] 3번 Slice를 선택 하고 위와 동일합니다.
여기에서 2번 Slice를 선택 하지 않은 이유는 기본적으로 backup tag가 사용하고 있으며 변경 해서는 안됩니다.
partition> 3
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 250
Enter partition size[0b, 0c, 250e, 0.00mb, 0.00gb]: $ // 남은 공간 모두 사용함
partition> print
Part Tag Flag Cylinders Size Blocks
3 unassigned wm 250 - 1019 1.50GB (770/0/0) 3153920

[설명] 재부팅 해도 사용할 수 있게 저장합니다.
partition> label
Ready to label disk, continue? yes

[설명] 작업 종료
partition> quit
format> quit

[설명] 그럼 위에서 기억하라고 했던 Disk Slice name를 이용해서 제대로 적용 되었는지 확인 하겠습니다.
[root@calmmass:/]
# ls /dev/dsk/c2t0d0*
/dev/dsk/c2t0d0p0@ /dev/dsk/c2t0d0s10@ /dev/dsk/c2t0d0s3@
/dev/dsk/c2t0d0p1@ /dev/dsk/c2t0d0s11@ /dev/dsk/c2t0d0s4@
/dev/dsk/c2t0d0p2@ /dev/dsk/c2t0d0s12@ /dev/dsk/c2t0d0s5@
/dev/dsk/c2t0d0p3@ /dev/dsk/c2t0d0s13@ /dev/dsk/c2t0d0s6@
/dev/dsk/c2t0d0p4@ /dev/dsk/c2t0d0s14@ /dev/dsk/c2t0d0s7@
/dev/dsk/c2t0d0s0@ /dev/dsk/c2t0d0s15@ /dev/dsk/c2t0d0s8@
/dev/dsk/c2t0d0s1@ /dev/dsk/c2t0d0s2@ /dev/dsk/c2t0d0s9@

[설명] 포멧 작업을 하겠습니다. 파일 시스템은 ufs(Unix File System)으로 만들어 집니다.
[root@calmmass:/]
# newfs /dev/dsk/c2t0d0s0
newfs: construct a new file system /dev/rdsk/c2t0d0s0: (y/n)? y
/dev/rdsk/c2t0d0s0: 409600 sectors in 100 cylinders of 128 tracks, 32 sectors
200.0MB in 7 cyl groups (16 c/g, 32.00MB/g, 15360 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 65600, 131168, 196736, 262304, 327872, 393440,

[설명] 포멧 작업을 하겠습니다. 파일 시스템은 ufs(Unix File System)으로 만들어 집니다.
[root@calmmass:/]
# newfs /dev/dsk/c2t0d0s1
newfs: construct a new file system /dev/rdsk/c2t0d0s1: (y/n)? y
/dev/rdsk/c2t0d0s1: 614400 sectors in 150 cylinders of 128 tracks, 32 sectors
300.0MB in 10 cyl groups (16 c/g, 32.00MB/g, 15360 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 65600, 131168, 196736, 262304, 327872, 393440, 459008, 524576, 590144,

[설명] 포멧 작업을 하겠습니다. 파일 시스템은 ufs(Unix File System)으로 만들어 집니다.
[root@calmmass:/]
# newfs /dev/dsk/c2t0d0s3
newfs: construct a new file system /dev/rdsk/c2t0d0s3: (y/n)? y
/dev/rdsk/c2t0d0s3: 3153920 sectors in 770 cylinders of 128 tracks, 32 sectors
1540.0MB in 34 cyl groups (23 c/g, 46.00MB/g, 11264 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 94272, 188512, 282752, 376992, 471232, 565472, 659712, 753952, 848192,
2261792, 2356032, 2450272, 2544512, 2638752, 2732992, 2827232, 2921472,
3015712, 3109952,

[설명] 파일 시스템은 ufs(Unix File System)으로 만들어 졌는지 확인 합니다.
[root@calmmass:/]
# fstyp /dev/dsk/c2t0d0s0
ufs
[root@calmmass:/]
# fstyp /dev/dsk/c2t0d0s1
ufs
[root@calmmass:/]
# fstyp /dev/dsk/c2t0d0s3
ufs

[설명] Disk를 디렉토리에 할당하기 위해서 디렉토리를 구성하고 마운트 작업을 진행 합니다.
[root@calmmass:/]
# mkdir /disk1 /disk2 /backup
[root@calmmass:/]
# mount -F ufs /dev/dsk/c2t0d0s0 /disk1
[root@calmmass:/]
# mount -F ufs /dev/dsk/c2t0d0s1 /disk2
[root@calmmass:/]
# mount -F ufs /dev/dsk/c2t0d0s3 /backup

[설명] 아래와 같이 정상적으로 마운트가 되었다면 모두 성공 하신 겁니다.
[root@calmmass:/]
# df -h
Filesystem size used avail capacity Mounted on
.. 생략 ..
/dev/dsk/c2t0d0s0 187M 1.0M 167M 1% /disk1
/dev/dsk/c2t0d0s1 281M 1.0M 252M 1% /disk2
/dev/dsk/c2t0d0s3 1.5G 1.5M 1.4G 1% /backup



+ 추가로 /etc/vfstab에 추가된 파티셔닝 재설정 해주기.



4. 재부팅 이후 hard 추가 방법

[설명] 첫번째 방법은 /root 홈디렉토리에 reconfigure 빈파일을 생성하면 부팅 할때 장치를 읽고 OS를 구동 시킵니다.
[root@calmmass:/]
# touch /reconfigure

[설명] 두번째 방법은 명령어를 이용해서 장치를 인지 할 수 있습니다.
[root@calmmass:/]
# reboot -- -r

[설명] 세번째 방법은 솔라리스 전용 키보드를 이용하는 방법입니다.
ok boot -r -> PROM

장치 인식이 완료되면 작업은 3번과 동일 합니다.



솔라리스는 리눅스보다 조금 어렵습니다.
윈도우는 C드라이브, D드라이브
리눅스는 /dev/sda, /dev/sdb
솔라리스는 /dev/dsk/c#t#d#s# 또는 /dev/dsk/c#d#s#
으로 구분 할 수 있는데 솔라리스는 sparc-IDE와 x86-IDE 많은 차이점이 발생 됩니다.
x86은 일반 컴퓨터로 사용하기 위한 방법으로 스카시 카드가 필요 없기 때문입니다.
하지만 sparc 서버같은 경우에는 스카시 카드 -> 케이블 -> 각각의 디스크로 구성 되어있기 때문입니다.

여러가지 어려운 Disk의 세계에서 조금 벗어난 기분이지만 아직 더 공부를 해야 할 것 같습니다.










반응형
반응형

출처 : http://seed.kisa.or.kr/iwt/ko/sup/EgovAriaInfo.do


ARIA 소개

ARIA는 경량 환경 및 하드웨어 구현을 위해 최적화된, Involutional SPN 구조를 갖는 범용 블록 암호 알고리즘입니다. ARIA의 주요 특성은 다음과 같습니다.

블록 크기 :
128비트
키 크기 :
128/192/256비트 (AES와 동일 규격)
전체 구조 :
Involutional Substitution-Permutation Network
라운드 수 :
12/14/16 (키 크기에 따라 결정됨)

ARIA는 경량 환경 및 하드웨어에서의 효율성 향상을 위해 개발되었으며, ARIA가 사용하는 대부분의 연산은 XOR과 같은 단순한 바이트 단위 연산으로 구성되어 있습니다. ARIA라는 이름은 Academy(학계), Research Institute(연구소), Agency(정부 기관)의 첫 글자들을 딴 것으로, ARIA 개발에 참여한 학·연·관의 공동 노력을 표현하고 있습니다.



표준화 동향

ARIA는 지난 2004년에 국가표준기본법에 의거, 지식경제부에 의하여 국가표준(KS)으로 지정되었습니다.

표준번호 :
KS X 1213:2004
부문 :
X-정보산업 < 정보기술(IT)응용
표준명 :
128비트 블록암호 알고리즘 ARIA(128 bit block encryption algorithm ARIA)
이 력 :
2004년 12월 30일 제정
적용범위 :
이 규격은 가변 크기의 암호키를 사용하여 128bit 블록 단위로 데이터의 암호화, 복호화를 수행하는 블록 암호 알고리즘을 규정합니다. 


AIRA 소스코드 보급 주소 (다운로드 주소)

http://seed.kisa.or.kr/iwt/ko/bbs/EgovReferenceDetail.do?bbsId=BBSMSTR_000000000002&nttId=33&pageIndex=2&searchCnd=&searchWrd=

http://seed.kisa.or.kr/iwt/ko/bbs/EgovReferenceDetail.do?bbsId=BBSMSTR_000000000002&nttId=39&pageIndex=1&searchCnd=&searchWrd=



반응형
반응형

Hyper-V 개요

1명 중 1명이 도움이 되는 것으로 평가 - 이 항목 평가

게시: 2012년 2월

업데이트 날짜: 2013년 5월

적용 대상: Windows Server 2012

Tip팁:
Hyper-V가 Windows Server 2012에서 향상되었습니다. 평가 가이드를 참조하고 Windows Server 2012 평가판을 다운로드합니다.

이 항목에서는 Hyper-V 역할에 대한 유용한 팁, 이전 버전 Hyper-V와 비교할 때 이번 버전에서 새롭게 제공되거나 업데이트된 주요 기능, 하드웨어 요구 사항, Hyper-V 가상 컴퓨터에서 사용하도록 지원되는 운영 체제(게스트 운영 체제) 목록 등 Windows Server 2012의 Hyper-V 역할에 대해 설명합니다.

다음 항목을 찾으려고 했습니까?

역할 및 기술 설명

Hyper-V 역할을 사용하면 Windows Server 2012에서 기본적으로 제공되는 가상화 기술을 사용하여 가상화된 컴퓨팅 환경을 만들고 관리할 수 있습니다. Hyper-V 역할을 설치하면 필수 구성 요소가 설치되고, 필요에 따라 관리 도구가 설치됩니다. 필수 구성 요소에는 Windows 하이퍼바이저, Hyper-V 가상 컴퓨터 관리 서비스, 가상화 WMI 공급자 및 VMbus(가상 컴퓨터 버스)/VSP(가상화 서비스 공급자)/VID(가상 인프라 드라이버) 등의 기타 가상화 구성 요소가 포함됩니다.

Hyper-V 역할용 관리 도구는 다음 항목으로 구성됩니다.

  • GUI 기반 관리 도구: Hyper-V 관리자, MMC(Microsoft Management Console) 스냅인 및 가상 컴퓨터 연결(가상 컴퓨터와 상호 작용할 수 있도록 가상 컴퓨터의 비디오 출력에 대한 액세스 제공)

  • Windows PowerShell용 Hyper-V 관련 cmdlet. Windows Server 2012에는 Hyper-V 모듈이 포함되어 있으며, 이 모듈을 통해 GUI에서 사용 가능한 모든 기능은 물론 GUI에서는 제공되지 않는 기능에도 명령줄을 통해 액세스할 수 있습니다. Hyper-V 모듈에 대한 자세한 내용은 Windows PowerShell용 Hyper-V 모듈을 참조하십시오.

서버 관리자를 사용하여 Hyper-V 역할을 설치하는 경우 관리 도구는 제외하도록 지정하지 않으면 포함됩니다. Windows PowerShell을 사용하여 Hyper-V 역할을 설치하는 경우에는 관리 도구가 기본적으로 포함되지 않습니다. 관리 도구를 포함하려면 –IncludeManagementTools 매개 변수를 사용합니다. Hyper-V 역할 설치에 대한 자세한 내용은 Hyper-V 역할 설치 및 가상 시스템 구성을 참조하십시오.

note참고
Windows Server 2012의 Hyper-V 관리 도구는 이번 Hyper-V 버전만 관리하도록 설계되었습니다. 즉, 이 도구를 사용하여 이전 버전의 Hyper-V를 관리할 수는 없습니다.

Hyper-V 기술은 하드웨어를 가상화하여 물리적 컴퓨터 한 대에서 여러 운영 체제를 동시에 실행할 수 있는 환경을 제공합니다. Hyper-V를 통해 가상 컴퓨터 및 해당 리소스를 만들고 관리할 수 있습니다. 각 가상 컴퓨터는 자체 운영 체제에서 실행할 수 있는 격리되고 가상화된 컴퓨터 시스템입니다. 가상 컴퓨터 내에서 실행되는 운영 체제를 게스트 운영 체제라고 합니다.

Hyper-V의 아키텍처에 대한 자세한 내용은 Windows Server 2012 Hyper-V 구성 요소 아키텍처 포스터를 참조하십시오.

유용한 팁

Hyper-V에서는 효율성을 높이고 비용을 줄이기 위해 다음과 같은 여러 업무 목표를 지원하도록 응용 프로그램 및 작업을 가상화할 수 있는 인프라를 제공합니다.

  • 사설 클라우드 환경 설정 또는 확장. Hyper-V를 사용하면 보다 유동적인 주문형 IT 서비스를 제공할 수 있도록 수요가 변경됨에 따라 사용률을 조정하고 공유 리소스를 사용하도록 전환하거나 공유 리소스 사용을 확장할 수 있습니다.

  • 하드웨어 사용률 높이기. 서버와 작업을 보다 기능이 뛰어난 소수의 물리적 컴퓨터에 통합함으로써 전력, 물리적 공간 등의 리소스 사용량을 줄일 수 있습니다.

  • 비즈니스 연속성 개선. Hyper-V를 사용하면 작업의 가동 중지 시간(예약된 경우와 예약되지 않은 경우 모두)에 대한 영향을 최소화할 수 있습니다.

  • VDI(가상 데스크톱 인프라) 설정 또는 확장. VDI를 통해 중앙 집중식 데스크톱 전략을 마련함으로써 업무 유연성 및 데이터 보안을 개선할 수 있을 뿐만 아니라 데스크톱 운영 체제와 응용 프로그램의 규정 준수 및 관리를 간소화할 수 있습니다. Hyper-V 및 RD(원격 데스크톱) 가상화 호스트를 같은 물리적 컴퓨터에 배포하면 개인 가상 데스크톱 또는 가상 데스크톱 풀을 사용자에게 제공할 수 있습니다.

  • 배포 및 테스트 작업 효율성 개선. 가상 컴퓨터를 사용하는 경우 일반적으로 필요한 모든 하드웨어를 구입하거나 관리하지 않고도 다양한 컴퓨팅 환경을 재현할 수 있습니다.

새로운 기능 및 변경된 기능

Windows Server 2012의 Hyper-V는 다양한 측면에서 개선되었습니다. 다음 표에는 이번 버전의 Hyper-V에서 변경된 주요 기능이 나와 있습니다. 이러한 변경 내용 및 여기에 나와 있지 않은 기능의 추가 변경 내용은 Hyper-V의 새로운 기능을 참조하십시오.

기능 새로운 기능 또는 업데이트된 기능 요약

클라이언트 Hyper-V(Windows(R) 8 Pro의 Hyper-V)

새로운 기능

Windows 데스크톱 운영 체제를 사용하여 Hyper-V 가상 컴퓨터를 만들고 실행할 수 있습니다.

Windows PowerShell용 Hyper-V 모듈

새로운 기능

Windows PowerShell cmdlet을 사용하여 Hyper-V 환경을 만들고 관리할 수 있습니다.

Hyper-V 복제본

새로운 기능

저장소 시스템, 클러스터 및 데이터 센터 간에 가상 컴퓨터를 복제하여 비즈니스 연속성을 보장하고 재해 복구 기능을 제공할 수 있습니다.

실시간 마이그레이션

업데이트된 기능

클러스터되지 않은 가상 컴퓨터와 클러스터된 가상 컴퓨터에서 모두 실시간 마이그레이션을 수행할 수 있으며, 둘 이상의 실시간 마이그레이션을 동시에 수행할 수 있습니다.

대폭 향상된 확장성과 개선된 복구 기능

업데이트된 기능

이전에 비해 크게 증가한 계산 및 저장소 리소스를 사용할 수 있습니다. 또한 하드웨어 오류 처리 기능이 개선되어 가상화 환경의 복원력 및 안정성이 향상됩니다.

자세한 내용은 Hyper-V Scalability in Windows Server 2012을 참조하십시오.

저장소 마이그레이션

새로운 기능

가동 중지 시간 없이 실행 중인 가상 컴퓨터의 가상 하드 디스크를 다른 저장소 위치로 이동할 수 있습니다.

가상 파이버 채널

새로운 기능

게스트 운영 체제 내에서 파이버 채널 저장소에 연결할 수 있습니다.

가상 하드 디스크 형식

업데이트된 기능

안정적인 고성능 가상 하드 디스크(최대 64TB)를 만들 수 있습니다.

가상 스위치

업데이트된 기능

네트워크 가상화 등의 새로운 기능과 다중 테넌트 지원 기능, Microsoft 파트너가 패킷 모니터링/전달/필터링용 기능을 추가하기 위해 제공할 수 있는 확장을 사용할 수 있습니다.

하드웨어 요구 사항

Hyper-V를 사용하려면 다음이 포함된 64비트 프로세서가 필요합니다.

  • 하드웨어 지원 가상화. 하드웨어 지원 가상화는 가상화 옵션, 특히 Intel VT(Intel Virtualization Technology) 또는 AMD-V(AMD Virtualization) 기술을 포함한 프로세서에서 사용할 수 있습니다.

  • 하드웨어 적용 DEP(데이터 실행 방지)가 제공되고, 사용하도록 설정되어 있어야 합니다. 특히 Intel XD 비트(execute disable bit) 또는 AMD NX 비트(no execute bit)를 사용해야 합니다.

지원되는 게스트 운영 체제를 위한 소프트웨어 요구 사항

Hyper-V에는 지원되는 게스트 운영 체제를 위한 소프트웨어 패키지가 포함되며, 이 패키지는 물리적 컴퓨터와 가상 컴퓨터 간의 통합 성능을 개선해 줍니다. 이 패키지를 통합 서비스라고 합니다. 일반적으로는 가상 컴퓨터에서 운영 체제를 설치한 다음 별도의 절차로 게스트 운영 체제에서 이 패키지를 설치합니다. 그러나 일부 운영 체제의 경우 통합 시스템이 기본 제공되므로 따로 설치할 필요가 없습니다. 통합 서비스 설치 지침은 Hyper-V 역할 설치 및 가상 시스템 구성을 참조하십시오.

아래 표에는 Hyper-V 가상 컴퓨터에서 게스트 운영 체제로 사용하도록 Windows Server 2012에서 지원되는 운영 체제 및 통합 서비스에 대한 정보가 나와 있습니다. 여기에는 통합 서비스를 사용할 수 있는 특정 Linux 배포에 대한 정보가 포함됩니다. Microsoft에서는 통합 서비스에서 발견된 문제에 대한 지원을 제공합니다.

note참고
Microsoft는 아래 표에 나열된 운영 체제에 대해 다음과 같은 방식으로 지원합니다.

  • Microsoft 운영 체제 및 통합 서비스에서 발견된 문제는 Microsoft 지원에서 지원됩니다.

  • Hyper-V에서 실행할 운영 체제 공급업체의 인증을 받은 다른 운영 체제에서 발견된 문제는 해당 공급업체가 지원 서비스를 제공합니다. 예를 들면, 아래 표에서 Red Hat Enterprise Linux 5.9 항목을 참조하십시오.

  • 기타 운영 체제에서 발견된 문제는 다중 공급업체 지원 커뮤니티인 TSANet에 제출됩니다.

게스트 운영 체제(서버) 최대 가상 프로세서 수 참고

Windows Server 2012

64

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

Windows Server 2008 R2 SP 1(서비스 팩 1)

64

Datacenter/Enterprise/Standard/Web Edition. 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows Server 2008 R2

64

Datacenter/Enterprise/Standard/Web Edition. 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 업그레이드합니다.

Windows Server 2008 SP 2(서비스 팩 2)

8

Datacenter/Enterprise/Standard/Web Edition(32비트/64비트). 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows Home Server 2011

4

버전 정보가 제공되지 않습니다. 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows Small Business Server 2011

Essentials Edition - 2

Standard Edition - 4

Essentials/Standard Edition. 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows Server 2003 R2 서비스 팩 2(SP2)

2

Standard/Web/Enterprise/Datacenter Edition(32비트/64비트). 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows Server 2003 서비스 팩 2

2

Standard/Web/Enterprise/Datacenter Edition(32비트/64비트). 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

CentOS 5.7 및 5.8

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

CentOS 6.0 – 6.3

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

Red Hat Enterprise Linux 5.7 및 5.8

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

Red Hat Enterprise Linux 5.9

64

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

Red Hat 인증을 받았습니다. https://hardware.redhat.com/show.cgi?id=894519

Red Hat Enterprise Linux 6.0 – 6.3

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

SUSE Linux Enterprise Server 11 SP2

64

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

Open SUSE 12.1

64

통합 서비스는 기본 제공되므로 별도로 다운로드하여 설치할 필요가 없습니다.

Ubuntu 12.04

64

통합 서비스는 기본 제공되므로 별도로 다운로드하여 설치할 필요가 없습니다.

게스트 운영 체제(클라이언트) 최대 가상 프로세서 수 참고

Windows 8

32

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

Windows 7 SP 1(서비스 팩 1)

4

Ultimate/Enterprise/Professional Edition(32비트/64비트) 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 업그레이드합니다.

Windows 7

4

Ultimate/Enterprise/Professional Edition(32비트/64비트) 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 업그레이드합니다.

Windows Vista SP2(서비스 팩 2)

2

Business/Enterprise/Ultimate(N 및 KN 버전 포함) 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows XP SP3(서비스 팩 3)

2

Professional. 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

Windows XP x64 Edition SP 2(서비스 팩 2)

2

Professional. 가상 컴퓨터에서 운영 체제를 설치한 다음 통합 서비스를 설치합니다.

CentOS 5.7 및 5.8

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

CentOS 6.0 – 6.3

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

Red Hat Enterprise Linux 5.7 및 5.8

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

Red Hat Enterprise Linux 6.0 - 6.3

64

Linux Integration Services Version 3.4 for Hyper-V를 다운로드하여 설치합니다.

SUSE Linux Enterprise Server 11 SP2

64

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

Open SUSE 12.1

64

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

Ubuntu 12.04

64

통합 서비스는 기본 제공되므로 설치할 필요가 없습니다.

참고 항목


반응형
반응형

 /* Channel Status */

 #define MQCHS_INACTIVE     0

 #define MQCHS_BINDING      1

 #define MQCHS_STARTING     2

 #define MQCHS_RUNNING      3

 #define MQCHS_STOPPING     4

 #define MQCHS_RETRYING     5

 #define MQCHS_STOPPED      6

 #define MQCHS_REQUESTING   7

 #define MQCHS_PAUSED       8

 #define MQCHS_INITIALIZING 13

반응형
반응형

출처 : http://blog.naver.com/PostView.nhn?blogId=syj0841&logNo=140046786256&widgetTypeCall=true


* depot 패키지로 소프트웨어 설치 및 삭제
1. 패키지를 적당한 곳에 두고 패키지를 등록하는 작업을 한다. 그리고 설치한다.
(내 경우는 /var/spool/sw 아래에 두고 시작한다.)
# swreg -l depot /var/spool/sw/package_name.xxx
# swinstall -s /var/spool/sw/package_name.xxx
# swremove

* depot 패키지 관련 SW List 보기
# swlist
# swlist -a state -l fileset > swlist.txt

* depot 패키지 관련 configuration
#
swconfig

* SAM (Sysam Administrator Manager)
#sam

반응형
반응형



HP-UX에서 acc 컴파일러를 사용하다가 갑자기 포맷하는 일이 생겨서 어쩔 수 없이 gcc를 설치하게 되었다.


gcc를 설치하려니 여러가지 dependencies 패키지가 발생했는데 우선 내가 설치하다가 걸린 패키지들은 아래와 같다.


gettext

libiconv

zlib

libgcc


뭐 버전에 따라서 차이가 있을 수 있지만 swinstall로 설치할때는 zlib와 libgcc만 표시가 되었는데

실제 설치해보니 libiconv, gettext가 걸렸다. 


기본적으로 /usr/gnome/lib 쪽에 설치는 되어 있는 것으로 확인되었지만 해당 부분은 내가 설치한 것도 아니고 링크를 걸어도

정상적으로 인식이 되지 않아 별도로 패키지를 구해서 설치하니 정상적으로 표시되었다.


마지막에 


/usr/lib/dld.sl: Can't open shared library: /usr/local/lib/libintl.sl
/usr/lib/dld.sl: No such file or directory
Abort(coredump)


해당 부분이 발생해서 당황했었지만 이는 gettext 라이브러리를 설치해주면 해결되는 현상.


HP-UX 설치 패키지들은 아래의 경로에서 다운 받았다.

URL : http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801/?ciid=2a08725cc2f02110725cc2f02110275d6e10RCRD (HP공식 - HP 가입해야합니당)

URL : http://hpux.connect.org.uk/

URL : http://mirrors.develooper.com/hpux/downloads.html

URL : http://gnu.april.org/software/gcc/gcc-4.4/buildstat.html


--------------------------------------------------------------------------------------------


위 같이... 설치해 보았지만 골 때리는 현상을 발견했다.

-m32 -m64 와 같은 비트 옵션이 먹지 않는다는 사실.


이게 왜 이런가 하고 한참 동안 삽질 하다가 HP 공식 홈페이지를 통해서 확인한 사실은 내가 영어 해석을 잘 못해서 그런데

대충 해석해보니 32비트용 gcc랑 64비트 gcc를 둘다 깔아야 한다. 라는 얘기로 보인다.


자세한 얘기는 아래의 링크...

http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801/?ciid=2a08725cc2f02110725cc2f02110275d6e10RCRD


There are two separate GCC packages for PA-RISC, one that generates ILP32 code, and another that generates LP64 code. The 32-bit version is installed in the /opt/hp-gcc directory, and the 64-bit version is installed in /opt/hp-gcc64.


심지어 깔리는 위치도 각각 다르다... 

일단 둘다 깔아야 겠다... 나중에 다시 한번 확인해봐야겠다 ㅠ



반응형
반응형

출처 : http://kyosi3t.tistory.com/6



Solaris에서 Package 관리 관련 명령어
 

- pkginfo 명령어

# pkginfo | more (전체 패키지 확인)

# poginfo -l SUNWab2s (SUNWab2s에 대한 상세 정보 출력)

# pkginfo | wc -l  (패키지 수 확인)

# pkginfo -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product | more

  (CD-ROM으로부터 패키지 정보 확인)

# pkginfo -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product -l SUNWaudio | more

  (CD-ROM으로부터 SUNWaudio 패키지 정보 확인)

 


- pkgadd 명령어

# pkgadd -d .  (현재 directory에서 directory형태로 되어 있는 패키지 모두 설치)

# pkgadd -d SUNWsan (현재 directory의 패키지중 SUNWsan 패키지만 설치)

# pkgadd -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product SUNWaudio

 (CD_ROM으로부터 SUNWsan 패키지 설치)

# pkgadd -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product -s spool SUNWaudio

 (/var/spool/pkg 디렉토리로 복사)

 


- pkgrm 명령어

# pkgrm SUNWsan

# pkgrm -s spool SUNWsan  (/var/spool/pkg로 제거된 패키지 저장)

# pkgrm -s /export/pkg SUNWsan  (spool 디렉토리 /export/pkg로 제거된 패키지 저장)

 


- pkgchk 명령어

 파일 정확성 검사 : 파일 퍼미션, 소유자, block or character device의 major/minor, 파일   크기, checksum, 수정날짜 등.

 (-l : 자세한 정보 제공

  -v : 검사한 파일리스트 제공

  -p path: 경로명의 정확성 검사 )

# pkgchk SUNWsan

#          <-- 아무런 message도 없으면 성공적인 설치

# pkgchk -v SUNWsan  (패키지에 포함된 file list)

 


# pkgchk -p /etc/passwd

  (설치시 /etc/passwd와 현재의 /etc/passwd의 변화된 정보를 보여줌)

# pkgchk -l -p /usr/bin/ls  (패키지 설치 정보 검사)

 


- /var/sadm/install/contents 파일

 pkgadd에 의해 패키지가 추가될 때마다 /var/sadm/install/contents에 정보 추가.

# grep pkgadd /var/sadm/install/contents  (pkgadd에 대한 정보를 출력)



출처 : http://www.ioneit.co.kr/ver1/bbs/board.php?bo_table=tiptech1_1&wr_id=46&page=2


이곳에서는 Solaris Sparc version의 Package & Patch에 관하여 설명하도록 하겟습니다.
    우리가 System으로 어떠한 일을 하는데 있어서 단순히 OS만을 설치하고 이것만을 사용하지는 않을 것 입니다.  대부분 어떤 작업을 하는데 있어서 좀더 편리하고, 좀더 좋은 부가적인 프로그램을 덧붙여 사용하겠죠. 파일을 압축하여 용량을 줄이는 압축프로그램, E-MAIL을 주고 받을 수 있는 E-MAIL프로그램, APHACHE, C compiler,.....등 사용자가 필요한 프로그램을 다운, 설치하여 사용합니다.

    과연 Solaris System에서는 어떻게 프로그램을 다운 받아, 설치하여 사용하는지 알아보기로 하겠습니다

SUN package
    MS나  리눅스등의 OS에서 응용프로그램을 설치하기 위해서 인스톨파일이나 RPM등을 사용하는데
    Solaris에서는 응용프로그램들을 그룹단위로 묶어 배포하는데 이를 Package라 칭합니다.
    먼저 가장 쉽게 Sun package를 접 할 수 있는것이, System 구입시 첨부되는 CD입니다. 그리고 웹 상에서도 이를 구할 수 있습니다
    Package식 배포에는 장점과 단점을 가지고 있는데,
  • 장 점 : 다른 OS와 달리 설치, 제거가 용이하다
              응용프로그램의 소스를 컴파일하여 설치를 할 경우 설치된 곳에 다른 응용프로그램도 
              같이 들어있을 가능성이 크다. 나중에 이러한 프로그램을 다시 삭제할 필요가 생겼을 
              때 해당 응용프로그램만 지운다는 것은 거의 불가능에 가깝다고 볼 수 있다.
  • 단 점 : 패키지의 종류가 많지 않다.
              패키지의 환경을 마음대로 바꿀 수 없다  

SUN 패키지 설치 이전에..
    1. 우선 System의 남은 용량을 확인합니다. ( df  -k )
2. System의 어느 디렉토리에 설치할 것 인지를 정한다.
    3. 웹이나 ftp를 통해서 다운을 받습니다.
    4. 일단 다운받은 패키지의 압축을 풉니다. (거의 파일이 압축되어있음.)
        - Z (uncompress 파일명), gz (gzip -d 파일명), zip (zip -d 파일명).. 이렇게들 풀면되구요
        - gzip 파일로 압축되어 있는건  먼저 gzip 패키지를 설치하셔야 합니다.
    5. pkgadd -d . 명령을 써서 패키지를 설치합니다.

     ※ 솔라리스의 패키지를 제공하는 사이트입니다.  http://www.sunfreeware.com

SUN 패키지 설치하기 

    pkgadd 명령 

    패키지를 추가하는 명령어이다. pkgadd에 대한 여러 옵션 중에서 가장 기본적이며 많이 쓰이는 것은 ‘-d’옵션이다. 이를 사용하지 않으면 패키지를 설치하지 못한다.
    아래의 예를 보면 pkgadd -d 다음에  "."을 붙이는데 이는 현재 디렉토리의 안에 있는 패키지들을 추가한다는 뜻입니다. "." 하나 땜에 애먹을 수 있습니다. 주의 하시기 바랍니다. 
    ※ 패키지를 추가할 때에는 SUPER-USER가 아니면 추가시킬 수 없슴.(root계정을 말하는 거예요)

    pkgadd [ -d [device | patname]] pkg_nmae

[leemary:/var/spool/pkg] pkgadd -d .
    다음과 같은 패키지를 사용할 수 있습니다.
      1  SUNWaudio     Audio applications
                       (sparc) 3.6.4,REV=1.98.08.13
    처리할 패키지(들)를 선택하십시오.(또는 모든 패키지를
    처리하려면'all'을 입력하십시오.) (default: all) [?,??,q]: 1
             *
             *
    ## 패키지 정보 처리 중
    ## 시스템 정보 처리 중
    ## 패키지 종속성 검증
             *
             *
    ## 1째 (전체: 1) 부분 설치
    <SUNWaudio>(이)가 성공적으로 설치되었습니다.
    다음과 같은 패키지를 사용할 수 있습니다.
      1  SUNWaudio     Audio applications
                       (sparc) 3.6.4,REV=1.98.08.13

     

SUN 패키지 삭제하기 

    pkgrm 명령

    이명령어는 현재 설치되어 있는 패키지를 삭제하고 싶을 때 사용하는 것으로, 사용법은 다음과 같습니다.
    pkgchk  package_name

# pkgrm SUNWaudio
     현재 설치되어 있는 패키지는 다음과 같습니다:
       SUNWaudio       Audio applications
                       (sparc) 3.6.4,REV=1.98.08.13
    이 패키지를 제거하겠습니까? y
    ## 설치된 패키지 예 <SUNWaudio> 제거
    ## 패키지 종속성 검증
    경고:
        <SUNWolrte> 패키지는 현재 제거되는 패키지에
        종속되어있습니다.
                       *
                       *
    이 패키지를 계속 제거하겠습니까? y
    ## 패키지 정보 처리 중
    ## 시스템 정보 갱신 중
    <SUNWaudio>(이)가 성공적으로 제거되었습니다.

패키지에관한 부가적 명령

    pkginfo 명령

    지정된 패키지의 정보를 알 수 있는 명령어로서, 일정패키지 폴더안에 pkginfo라는 file이 생성되어 있고, 안에 패키지의 정보에 대한 파라키터 값들이 저장되어있다.
    pkginfo [ -d [device | pathname] ] [ -l ] pkg_name

    -d : 패키지 소프트워에가 존재하고 있는, 장치명이나 절대디렉토리를 지정.
    - l : 지정 패키지의 세부적인 사항을 보고 싶을 때..
     
    다음은 Solaris 7 media에 있는 패키지를 사용한 예입니다.

# pkginfo -d /cdrom/cdrom0/s0/Solaris_2.7/Product |more
   system      FJSVhea        SunOS Header Files for FUJITSU platform specific
   system      FJSVvplr.u     Fujitsu platform specific symlinks (Root)
   system      FJSVvplr.us    Fujitsu platform links
   system      FJSVvplu.u     Fujitsu platform specific symlinks (user)
# pkginfo -d /cdrom/cdrom0/s0/Solaris_2.7/Product -l SUNWaudio
   PKGINST:  SUNWaudio
   NAME:  Audio applications
                    *
                    *
   VERSION:  3.6.4,REV=1.98.08.13
    FILES:      9 스풀된 경로 이름
                 2 디렉토리
                 3 실행 가능
                 4 패키지 정보 파일
               700 블록이 사용됨 (추정치)

     ※ pkginfo | wc -l : 현재 system에 install 되어있는 pkg의 숫자를 확인할 때 사용합니다.

    pkgchk 명령

    패키지 체크 명령어는 어떤 패키지의 추가 이후 system에 변경된 값을 기존과 비교하여 나타내주는 명령어입니다.
    패키지를 설치한후 지금과 변경된 값이 없을 경우 아무것도 디스플레이 하지 않는다
    pkgchk [-p path1, [path2..]]

# pkgchk -p /etc/group
 ERROR: /etc/group
    file size <278> expected <313> actual
    file cksum <23586> expected <25899> actual


참고 

Package의 유형

    아래의 예문  gawk-3.0.4-sol7-sparc-local.gz,  sunvts_40.tar.gz과 같은 두개의 패키지 파일이 있습니다
    이 파일의 압축을 풀고 내용을 보면 디스플래이 되는 화면이 다르다는 것을 느낄수 있을 것입니다.
    gawk-3.0.4-sol7-sparc-local.gz은 압축을 풀어도 하나의 파일이 생성이 되고 그 파일의 내용을 보면 
    패키지 파일의 이름이나 버젼등의 정보가 수록 되어있습니다.  달리 sunvts_40.tar.gz파일의 압축을 
    풀어보면 디렉토리가  생성이 되고 그 안에 패키지 정보나 기록위치등이 포함된 파일이 생성되어 
    있습니다. 이 두 유형의 패키지는 파일의 형태만 다를 뿐 설치하는 방법은 같습니다.

# ls
   gawk-3.0.4-sol7-sparc-local.gz

# gzip -d gawk-3.0.4-sol7-sparc-local.gz
# ls
   gawk-3.0.4-sol7-sparc-local
# more gawk-3.0.4-sol7-sparc-local
# PaCkAgE DaTaStReAm
   SMCgawk 1 3454
# end of header
gawk
NAME=gawk
ARCH=sparc
VERSION=3.0.4
CATEGORY=application
VENDOR=Free Software Foundation
EMAIL=steve@smc.vnet.net
PSTAMP=Steve Christensen
BASEDIR=/usr/local
CLASSES=none
0030939000081a40000000a0000000a0000000138ab966d00000d1b000000200000004a00
000000000000000000000f00000003SMCgawk/pkgmap: 1 3454
 

# ls
   sunvts_40.tar.gz
# gzip -d sunvts_40.tar.gz
# ls
   sunvts_40.tar
# tar xvf sunvts_40.tar
x SUNWvts, 0 bytes, 0 테이프 블록 
x SUNWvts/install, 0 bytes, 0 테이프 블록 
x SUNWvts/install/checkinstall, 4014 bytes, 8 테이프 블록 
x SUNWvts/install/copyright, 59 bytes, 1 테이프 블록 
# ls -al
drwxr-xr-x 11 root other 512 3월 25일 23:57 .
drwxrwxr-x 3 root sys 512 3월 12일 14:18 ..
drwxrwxr-x 4 root other 512 1999년 12월 23일 SUNWvts
drwxrwxr-x 3 root other 512 1999년 12월 23일 SUNWvtsmn
drwxrwxr-x 4 root other 512 1999년 12월 23일 SUNWvtsx
-rw-r--r-- 1 root other 17776128 3월 25일 23:56 sunvts_40.tar
#cd SUNWvts 
# ls
install pkginfo pkgmap reloc reloc.cpio.Z


    contents file
    /var/sadm/install/contents file은 설치된 pakage에 대한 log가 수록되어있다
    system의 패키지에 관한  정보를 알 수 있다.

 

 

SUN 패치..

    언제라도 발생할 수 있는 보안 침해나, 버그, y2k, 업그래이드 사항에 대하여 썬에서는 솔라리스 각 버전에 대해서 패치를 정기적으로 제공해준다.
    특히 y2k 패치가 안되어 있는 OS는 해당되는 패치를 해주어야 한다.

    패치 넘버
    솔라리스에서는 독특한 패치 ID를 부여한다. 예로 110281-02를 보면 패치넘버 110281의 두 번째 업그래이드 버전이라는 걸 알 수 있다

     

패치 구하기

    썬에서 제공하는 패치는 여러곳에서 구할 수 있으나, 대표적으로 http://sunsolve.sun.com/
    에서 쉽게 다운받을 수 있다. http, ftp로의 다운을 제공하며 패치에관 한 Report를 제공한다.
     

  • Patchfinder

    OS별로 추천되는 패치를 받을 수가 있다. 여기서는 사용자가 선택을 할 수가 없으며 단순히 썬에서 권고하는 여러 패치 ID가 하나의 파일로 압축되어져 있는 것을 다운 받을 수 있다. 그렇다고 이곳에서는 특정 패치 ID를 다운받을 수 없는 것은 아니다. Find Patch라는 패치 ID검색 기능이 있어서 이곳에서 원하는 패치 ID를 검색하여 다운 받을 수 있다. 

  • Recommended & Security Patches 
    OS별, 보안관련 패치로 분류되어 있다. 이중 패치하고자 하는 것을 선택하면 여러 패치 ID리스트가 나올 것입니다. 리스트에서 사용자가 원하는 것만 클릭해서 다운로드를 받을 수 있고 모두 받을 수도 있습니다. 선택한 것을 다운로드 받으면‘ Recommended.zip과 같이 하나의 압축파일 형태로 제공이 됩니다..

 

패치를 하기 이전에

    패키지를 설치하거나 패치를 하기 이전도 패키지 설치와 마찬가지 입니다.  System의 상황을 파악
    하여야 하고. 다운받을 곳의 위치와 필요 패키지의 설치 여부 등을 파악해야 됩니다.
    또한 자신의 서버에 어떤 패치가 설치되어 있는지에 대한 정보를 수집한다 이러한 설치된 패치 정보를 보기위해서 showrev라는 명령어를 사용한다. 이 명령어는 머신이나 소프트웨어의 정보를 보여주는 명령어이다. 

    showrev [-a] [-p] [-w] [-c command] 

    -a : 모든 정보를 보여준다. 
    -p : 패치에 관한 정보만을 보여준다. 
    -c command : 입력된 명령어(command)에 대한 정보를 보여준다. 

# showrev
Hostname: leemary
Hostid: 80c5575c
Release: 5.7
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Kernel version: SunOS 5.7 Generic 106541-15 January 2001

     

패치 하기

    먼저 패치 파일을 다운받아야 겟죠.
    그리구 zip파일을 이용하여 압축을 풉니다.

     

    patchadd 명령

     patchadd    patch ID

    패치를 추가하는 명령어이다.  README 파일을 꼭 참조하시고 명령을 실행하시기 바랍니다.
    다음은 Solaris 7 OS 의 패치파일모음인 7-Recommended 파일을 다운받아 압축을 풀어 생성된
    7-Recommeded폴더의 내용과 인스톨 시키는 과정입니다.
    개별적인 패치와 달리 Recommended 패치는 install_cluster파일을 실행시켜 주시면 됩니다.
     

# ls
106300-09        107200-12        107794-01        108756-01
106327-08        107259-02        107834-03        108758-01
                            *
                            *
107115-07        107654-08        108662-01        CLUSTER_README
107148-08        107684-02        108721-02        copyright
107149-07        107702-07        108748-01        install_cluster
107171-08        107709-12        108750-01        patch_order
107180-27        107792-02        108754-01
# install_cluster
Patch cluster install script for Solaris 7 Recommended
*WARNING* SYSTEMS WITH LIMITED DISK SPACE SHOULD *NOT* INSTALL PATCHES:
With or without using the save option, the patch installation process
will still require some amount of disk space for installation and
administrative tasks in the /, /usr, /var, or /opt partitions where
patches are typically installed.  The exact amount of space will
depend on the machine's architecture, software packages already 
installed, and the difference in the patched objects size.  To be
safe, it is not recommended that a patch cluster be installed on a
system with less than 4 MBytes of available space in each of these
partitions.  Running out of disk space during installation may result
in only partially loaded patches.  Check and be sure adequate disk space
is available before continuing.
Are you ready to continue with install? [y/n]: y
Determining if sufficient save space exists...
Sufficient save space exists, continuing...
Installing patches located in /export/home/7_Recommended
Using patch_order file for patch installation sequence
Installing 106960-01...
  Installation of 106960-01 failed. Return code 2.
Installing 107038-01...
  Installation of 107038-01 failed. Return code 2.
Installing 107171-08...
                            *
                            *
                            *
 Interrupted ... Please wait
The following patches were not able to be installed:
        106960-01
        107038-01

For more installation messages refer to the installation logfile:
  /var/sadm/install_data/Solaris_7_Recommended_log
Use '/usr/bin/showrev -p' to verify installed patch-ids.
Refer to individual patch README files for more patch detail.
Rebooting the system is usually necessary after installation.
[leemary:/export/home/7_Recommended]

    ※ 패치시 패치실패 메시지가 나오면서 설치가 안되는 경우가 발생합니다. 이때 에러코드를 참조하시고
        대부분의 패치에러는 각 System에따라 필요하지 않은 패치들입니다.

     

패치 삭제하기


    patchrm 명령

    patchrm    patch ID

    추가되어 있는 패치를 삭제 시키는 명령어입니다.
    System에 패치를 시켰을 때 간혹 버그가 발생하는데, 이때 보조 디바이스를 사용하지 못한다거나 하는
    문제가 발생할 수 있습니다. 이럴 경우 해당 패치를 삭제시켜 주어야 합니다.

# patchrm 106300-09
Checking installed patches...
Patch 106300-09 has not been applied to this system.
Patchrm is terminating.

 


반응형
반응형


출처 : http://skmagic.tistory.com/379




WinDbg란?!

마이크로 소프트에서 배포하는 마이크로 소프트 윈도우의 다목적 디버거

유져모드 어플리케이션, 드라이버 및 커널모드에서 자체 운영체제 디버깅을 할 수 있다.



난 보통 덤프 파일 분석을 위해 사용하기에 덤프파일 분석을 위한 디버깅을 소개한다.


[덤프 디버깅]

1.유져모드 덤프 디버깅

2.커널모드 덤프 디버깅


(언제 다 정리하지?!)


[디버깅 방법]

1.심볼을 연결한다 (pdb파일이 있는 경로로 설정) (tip:웬만하면 경로는 영문명으로 하자)

2.소스코드를 연결한다.(안해도 콜스택정도는 나옴)

3.각종 명령어를 통해 분석할 수 있다.



[명령어]

k : 콜스택 보기

.ecxr : 예외가 발생한 상황에 저장된 컨텍스트 레코드를 보여준다(eax, ebx, ecx 등등...)

!analyze -v : Windebug가 자동분석을 해서 많은 정보를 보여준다.

u 주소값: 어셈보기



CommandoptionusageDesc
종료   
q  디버깅 종료
qd  디버깅 종료;연결해제
디버깅 환경정보   
vertarget  타겟 컴퓨터 정보 표시
version  디버그 환경 정보 표시
.lastevent  마지막 디버그 이벤트 정보 표시
||  디버깅 세션 정보 표시
sumble & sorurce   
.symfix  MS 심볼경로 설정
.sympath  심볼경로 확인/설정
.sym noisy  심볼파일 검색 과정을 출력
.srcpath  소스경로 설정
.srcnoisy .srcnoisy 1소스경로 검색 과정을 출력
모듈   
lm l로드된 모듈만 표시
  m [pattern]패턴과 일치되는 모듈만 표시
  v모듈 상세정보 표시
!lmi!lmi ntdll.dll 모듈 상세정보 표시
.reload /f [m_name]심볼을 즉시 로드
xX ntdll!*/v심볼 타입을 표시.
 X *!*abc*/t데이터 타입을 표시
  /n이름순으로 정렬
ln ln [address]해당 주소에 근접한 심볼의 정보 표시
레지스터   
r  레지스터 정보 표시
r $proc  현재 프로세스의 PEB주소( user-mode)
   현재 프로세스의 EPROcESS주소( kernel-mode)
r $thread  현재 스레드의 TEB주소( user-mode)
   현재 스레드의 ETHREAD주소( kernel-mode)
r $tpid  현재 프로세스 ID(PID)
r $tid  현재 스레드 ID(TID)
언어셈블   
u  언어셈블
  f언어셈블(함수전체)
  b언어셈블(ip이전의 8개 명령어)
콜스택   
k [n]콜스택 정보표시
  p함수정보 출력
  b인자표시
  n프레임번호
  vFPO정보 표시
  f스택 사용량 표시
break point   
bpbp 0x123456 bp 설정
bl  bp 리스트 출력
bcbc * | [frame_no] bp 삭제
bd,bebc * | [frame_no] bp disable/enable
bmbm notepad!*Win* 패턴과 일치하는 모든심볼에 bp설정
bubu aaa!bbb 로드되지 않은 심볼에 대한 bp설정
ba  특정 주소에 access시 bp
지역변수   
dvdv modulr!test*  
  /i심볼유형과 인자유형 표시
  /V변수저장 위치 표시( register or address )
데이터유형   
dtdf _EPROCESS 0xaddr 주소를 특정 데이터 형으로 변환해서 표시
du  Unicode string 표시
da  Ansi string 표시
dc   
db   
dy   
    
!address!address  
 !address [address]  
프로세스 & 스레드 정보   
!peb  PEB(Process Environment Block)표시
!teb  TEB(Thread Environment Block) 표시
    
!gle  API의 마지막 에러코드 표시
실행 제어   
t  Trace
~.t  다른 스레드를 중지시킨 상태에서 하나의 statementt실행
g   
p  Step Over
gugu 현재함수가 복귀할 때 까지 실행
 ~0 gu 스레드 0을 제외한 모든 스레드를 freeze함
wt  내부에서 호출된 함수와 함수호출 횟수등의 정보 표시
.cxr  컨텍스트 변경
!ready   
.thread   
!thread   
.trap   
.process   
!process   
ed   
ebeb .-6 90 90 90 90 90 90 6byte를 NOP(0x90)으로 변경
!error!error [error code] 에러코드 정보표시













출처 : http://blog.naver.com/process3

[심볼관련 사용하는 주요 명령어]

심볼을 로드할 때 사용하는 명령입니다.

보통은 심볼패스를 설정한 후에 .reload 와 같이 사용합니다.

kd> .symfix e:\symbols

kd> .reload
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Loading Kernel Symbols
........................
Loading User Symbols

lm 을 사용하여 심볼이 로드된 상태를 봅니다.

kd> lm
start end module name
804d9000 806ede00 nt (pdb symbols) e:\symbols\ntoskrnl.pdb\8592B6763F344B562\ntoskrnl.pdb
806ee000 80701d80 hal (deferred)
f9871000 f988b580 Mup (deferred)
f996f000 f998e780 fltMgr (deferred)
...

nt 는 심볼이 로드된 것이 보이는데 나머지는 deferred 라고 나옵니다.
이것은 WinDbg 의 lazy symbol loading (deferred symbol loading) 이라는 특징 때문에 그렇습니다.

WinDbg 는 심볼을 로드할 때 꼭 필요한 심볼만 올려놓고 나머지는 deferred 로 해놓고 심볼을 올리지 않습니다. deferred 로 된 녀석들은 나중에 해당 모듈이 WinDbg 상에서 실제 사용되는 순간이 발생해야만 로드가 됩니다. 필요한 것만 그때 그때 올려주는 나름대로 효율적인 방법입니다. ^^

WinDbg Help 에 보면 .reload 는 다양한 옵션을 가지고 있는데요.
제가 유용하게 사용하는 것만 몇가지 설명합니다.

.reload /i mydrv.sys (심볼이 맞지않아도 강제로 심볼 로드하기)

예를 들어 어제 빌드한 드라이버가 BSOD 를 발생시켜서 덤프가 만들어 졌는데 심볼은 보관하지 않아서 덤프분석을 할 수 없는 문제를 만났다고 가정합시다. 다행히도 어제 소스 코드를 그대로 보관하고 있었다고 하면 그것을 그대로 빌드하여 pdb 파일을 생성할 수 있습니다. 문제는 이 pdb 파일을 로드하려고 해도 WinDbg가 TimeStamp 등을 체크하여 symbol mismatch 에러를 내면서 심볼로드를 하지 않는다는 겁니다. 이런 경우에 심볼이 맞는지 확인하지 말고 강제로 올려달라는 /i 옵션을 사용하면 심볼이 올라갑니다.

.reload /f (심볼 모두 올리기)

보통 lazy symbol loading 상태로 그냥 사용하시면 되지만 혹시 모든 모듈의 심볼을 모두 올려 놓아야 할 경우가 있다면 /f 옵션을 사용해서 모든 모듈의 심볼을 올릴 수 있습니다.

.reload /u (심볼 모두 내리기)

반대로 모든 심볼을 모두 내려야 할 경우가 있다면 /u 옵션을 사용해서 모든 모듈의 심볼을 내릴 수 있습니다.

.reload /u mydrv.sys (특정모듈 심볼 내리기)

mydrv.pdb 를 로드하여 사용하고 있는데 새로 빌드한 mydrv.pdb 를 심볼패스에 복사하면 mydrv.pdb 가 사용중이라서 복사가 실패합니다. 이런 경우 /u mydrv.sys 옵션을 줘서 특정 모듈의 심볼만 내릴 수 있습니다.

.reload mydrv.sys (특정모듈 심볼 로드하기)

위와 같이 내려진 특정 모듈의 심볼만 다시 올리려면 mydrv.sys 처럼 모듈 이름을 줘서 로드합니다.


로드된 모듈 리스트 보기
lm 명령을 이용하면 된다.

lm k : Kernel Mode 모듈 표시
lm u : User Mode 모듈 표시
lm m : 패턴을 검사하여 해당하는 것만 보여줌 <lm m my*>

lkd> lm
start end module name
00c80000 00c90000 NateOnHook40u (export symbols) C:\Program Files\NATEON\BIN\NateOnHook40u.dll
00cb0000 00cb9000 MgHookDll C (export symbols) C:\Program Files\LG Software\On Screen Display\MgHookDll.dll
01000000 0106a000 windbg (pdb symbols) D:\Symbol\WebSymbol\windbg.pdb\D6EF677AA54441279479F0307F05A8941\windbg.pdb
016a0000 01784000 ext (export symbols) C:\Program Files\Debugging Tools for Windows\winext\ext.dll
01790000 017c1000 kext (pdb symbols) D:\Symbol\WebSymbol\kext.pdb\6B643FC4E9F94FF4ABA4CEF1FD6F89D61\kext.pdb


모듈의 심볼(Symbol) 검사
x 모듈!패턴 을 입력하면 된다.

lkd> x nt!Ke*
804f8c02 nt!KeQuerySystemTime = <no type information>
804f8c9e nt!KeEnableInterrupts = <no type information>
80500e38 nt!KeSwitchKernelStack = <no type information>
804fad32 nt!KeReadStateProcess = <no type information>
804f9188 nt!KeReleaseInterruptSpinLock = <no type information>


데이터 타입(Date Type) 표시
dt 데이터 타입 을 입력하면 된다.

lkd> dt _EPROCESS
+0x000 Pcb : _KPROCESS
+0x06c ProcessLock : _EX_PUSH_LOCK
+0x070 CreateTime : _LARGE_INTEGER
+0x078 ExitTime : _LARGE_INTEGER
+0x080 RundownProtect : _EX_RUNDOWN_REF
+0x084 UniqueProcessId : Ptr32 Void
+0x088 ActiveProcessLinks : _LIST_ENTRY
+0x090 QuotaUsage : [3] Uint4B
+0x09c QuotaPeak : [3] Uint4B
+0x0a8 CommitCharge : Uint4B



메모리 덤프(Memory Dump)
d* 명령들을 이용하면 된다.

db : Byte 형식 + Ascii 로 표시
dd : 데이터를 4Byte 형식으로 표시

lkd> db 8053db18
8053db18 8b ff 55 8b ec 8b 45 08-8b 4d 0c 8b 55 14 89 48 ..U...E..M..U..H
8053db28 0c 8b 4d 10 89 48 10 03-ca 89 48 14 8b 4d 18 83 ..M..H....H..M..
8053db38 c1 fe 89 48 18 8b 4d 1c-89 48 20 66 8b 4d 20 66 ...H..M..H f.M f



디스어셈블리(Disassembly)
u 주소 를 이용하면 된다. 특정 함수를 디스어셈블리 하고 싶으면 uf 주소 를 하면 된다.

u 주소 : 주소에서 일부분만 디스어셈블리
u 주소1 주소2 : 주소1에서 주소 2까지 디스어셈블리

lkd> u 8053db18 or uf nt!NtOpenProcess
nt!KeInitializeProfile:
8053db18 8bff mov edi,edi
8053db1a 55 push ebp
8053db1b 8bec mov ebp,esp
8053db1d 8b4508 mov eax,[ebp+0x8]
8053db20 8b4d0c mov ecx,[ebp+0xc]


메모리 영역 속성 보기(VA Dump)
!vadump 명령을 사용하면 된다. 만약 특정 메모리의 속성을 보고 싶다면 !vprot 주소 명령을 사용하면 된다.

0:000> !vadump
BaseAddress: 00000000
RegionSize: 00010000
State: 00010000 MEM_FREE
Protect: 00000001 PAGE_NOACCESS

BaseAddress: 00010000
RegionSize: 00001000
State: 00001000 MEM_COMMIT
Protect: 00000004 PAGE_READWRITE
Type: 00020000 MEM_PRIVATE


0:000> !vprot 30c191c
BaseAddress: 030c1000
AllocationBase: 030c0000
AllocationProtect: 00000080 PAGE_EXECUTE_WRITECOPY
RegionSize: 00011000
State: 00001000 MEM_COMMIT
Protect: 00000010 PAGE_EXECUTE
Type: 01000000 MEM_IMAGE


프로세스 관련
모든 프로세스를 보기위해서는 !process 0 0 를 입력하면 된다. 디버거를 특정 프로세스에 붙이고 싶으면 .process /i [pid] 를 입력하면 된다.


lkd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 8a3a3490 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000
DirBase: 00780000 ObjectTable: e1001c70 HandleCount: 521.
Image: System

PROCESS 8a184158 SessionId: none Cid: 03f0 Peb: 7ffdd000 ParentCid: 0004
DirBase: 17a40020 ObjectTable: e163dd70 HandleCount: 20.
Image: smss.exe

PROCESS 89df4da0 SessionId: 0 Cid: 0440 Peb: 7ffd5000 ParentCid: 03f0
DirBase: 17a40040 ObjectTable: e1c6cb18 HandleCount: 626.
Image: csrss.exe


구조체 내용 보기

!strct _KMUTANT ff93a330

이렇게 명령을 주면 자료구조랑 값들이 같이 출력이 된다.


WinDBG 디버깅 과정 파일로 저장하기

Windbg를 이용해서 디버깅을 하다보면,

디버깅과정을 저장할 필요가 생깁니다.
또는 아래와 같은 상황이 있을수 있을겁니다.


- 다른분의 도움을 통해 디버깅한 내용을 참고하고 싶은경우
- 수십시간동안 켜놓은 결과를 저장해야하는경우. -> 화면 버퍼를 넘어가면 그동안의 내용이 사라지죠~
- .cls 를 습관적으로 사용하는경우. -> 제경우입니다. T.T

이때 유용한 명령어가 바로.

.logxxx 계열 명령어입니다.


.logopen logfile
>> 디버깅 과정을 저장할 로그파일 명을 지정합니다.
ex) .logopen “c:\dbglog\logs.txt”

.logfile
>> 현재 기록중인 디버깅 로그파일의 상태를 표시합니다.

.logclose
>> 기록중이던 로그를 종료(완료)합니다.



유용하게 쓰세요~
(단, .logopen 이전의 내용은 저장되지 않습니다.` ^^)
참고하세요)
.logopen 정보 역시 Windbg WorkSpace 에 함께 저장됩니다.~ ^^





GUI환경의 디버깅툴인 windbg 사용법을 알아보자.

사용자 삽입 이미지


일단 각 필요파일들을 download해야겠지?

◎ 필요한 파일들
* windbg 다운로드
32bit버전 : http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
64bit버전 : http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx

* 심볼파일 다운로드
http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx
위의 링크에서 각 OS에 맞는 파일 다운로드하여 설치

◎ 설치할때 특별하게 주의할 점은 없다. 모르겠다 싶으면 그냥 "다음(Next)" 버튼만 눌러라.
단, 기억할것은 심볼파일을 설치할때 어디에 설치했는지 잘 봐두도록..
기본설치 위치는 해당 OS폴더 밑의 Symbols이다. 예를 들면 XP인 경우는
"C:\Windows\Symbols"에 설치된다.

◎ 실행방법 및 심볼파일 경로 설정
1. 실행창에서
시작 -> 실행 창 또는 명령프롬프트 창에서 아래와 같이 입력
windbg -y 심볼파일경로 -i OS이미지경로 -z 덤프파일경로
예> windbg -y SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols -i d:\i386 -z c:\windows\memory.dmp

2. 시작 -> 모든 프로그램 -> Debugging Tools for Windows -> WinDbg 실행
File -> Symbol File Path... 실행
Symbol Search Path창이 뜨면 아래 경로 입력하고 확인 클릭
경로 : SRV*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols
File -> Image File Path... 실행
OS 이미지 경로입력 (OS CD의 i386에 있음)
File -> Open Crash Dump... 실행
Dump파일 경로 입력

◎ Remote Debugging 방법
* Debugger사용하는 방법
- 서버, 클라이언트 모두 windbg를 설치, 서버측에 심볼파일 설치
1. 서버(debug하려는 기계)셋팅 :
복수사용자(클라이언트) : 콘솔창 : WinDbg -server npipe:pipe=pipename
단일사용자 : WinDbg실행 -> 명령창: .server npipe=pipename
2. 클라이언트 셋팅:
1) WinDbg -remote npipe:server=Server, pipe=Pipename[,password=password]
2) WinDbg 실행 -> File-> Connect to Remote Session 선택
npipe:server=Server,pipe=PipeName[,password=Password]입력
* Remote.exe 사용하는 방법
- 서버, 클라이언트 모두 debugging tool 설치, 심볼파일은 클라이언트 설치

◎ 주요 명령어


참조 :
1. MSDN
2. 네이버 윈도우시스템프로그래밍 카페




참고 자료

Windbg Tutorial
http://www.codeproject.com/KB/debug/windbg_part1.aspx

Windows에서 디버깅을 위해 만든 작은 메모리 덤프 파일을 읽는 방법
http://support.microsoft.com/default.aspx?scid=kb;ko;315263

Windbg로 덤프 남기는법
http://msdn.microsoft.com/en-us/library/ff562428.aspx

잊지 말아야 할 점은, windbg는 symbol과 source code의 매칭을 해주지 않는다.
반드시 Symbol File Path와, Source File Path 메뉴 에서 경로를 제대로 지정해주어야, 덤프 분석시 정보가 제대로 출력된다.

windbg shell command

덤프 생성
.dump /f C:\경로\파일명.dmp

덤프 정보 분석
!analyze [-v]

지역변수 보기
dv

콜스택 보기
kb

콜스택에 번호 매겨서 보기
kn

스택 프레임 번호에 맞추기 (0번부터 시작)
.frame [번호]

Display Exception Context Record
.ecxr

레지스터 보기
r

디스 어셈블해서 보기
u [주소]

직접 메모리 내용 보기
dd [주소]

메모리의 내용과 심벌을 일치시켜 보여준다.
dds [주소]

프로세스 리스팅
!process 0 0

프로세스 어태치 시키기
.process /i [pid]


할당된 가상메모리 덤프

올리디버거의 Memory Map윈도의 기능

!vadump [-v]


해당메모리 주소가 어떤 속성인지 알려줌

!vprot [주소]


현재 프로세스내에 동작중인 스레드의 스택을 보여줌

!uniqstack [-b]

-b옵션을 주면 스택에 담긴 아규먼트까지 보여준다


현재 스레드에 할당된 권한(Privilege)를 보여줌

!token


각 스레드가 동작한 시간

!runaway


레지스트리 정보 확인

!dreg

예) 0:000> !dreg System\CurrentControlSet\Services\Tcpip!*


해당 주소를 UNICODE_STRING구조체 형식으로 살펴봄

!ustr [주소]

typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;


해당 주소를 ANSI_STRING혹은 OEM_STRING구조체로 살펴봄

!str [주소]

typedef struct _STRING {
USHORT Length;
USHORT MaximumLength;
PCHAR Buffer;
} STRING;
typedef STRING ANSI_STRING;
typedef STRING OEM_STRING;



스레드 로컬 스토리지 슬롯을 살펴봄

!tls

모든 슬롯 출력

예) !tls -1

Specifies the thread environment block (TEB). If this is 0 or omitted, the current thread is used

예) !tls 0


현재 스레드의 TEB정보를 출력

!teb


현재 프로세스의 PEB정보를 출력

!peb


잘 알려진 몇몇 STL템플릿정보를 출력

!stl


로딩된 dll모듈의 베이스주소와 길이 모듈명을 출력한다

lm


해당모듈의 자세한 정보를 출력

!lmi [모듈]

예) !lmi 00400000


반복적인 디버거명령을 실행시키면서, 링크드리스트 정보를 출력함

!list

예) !list "-t ntdll!_LIST_ENTRY.Flink -e -x \"dd @$extret l4; dt ntdll!_RTL_CRITICAL_SECTION_DEBUG @$extret-0x8\" ntdll!RtlCriticalSectionList"


현재 Shared User-mode Page를 출력함

현재 타임존과 시스템루트, TickCount와 시간을 출력함

!kuser


로드된 모듈들의 리로케이션되기전의 주소를 출력한다

!imgreloc [주소]


최근 에러코드를 리턴한다

!gle


에러코드를 가지고 무슨 에러인지 설명을 보여준다

!error [에러코드번호]


글로벌 플래그를 설정 혹은 보여준다

!gflag


로드된 모듈들에 대한 커스터마이징(?)된 출력을 해준다.

!for_each_module ["명령어"]

예) !for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName @#LoadedImageName

로드된 모듈에서 MZ로 시작되는것을 찾는다
예) !for_each_module s-a @#Base @#End "MZ"


가상메모리에서 이미지헤더를 검색한다 (MZ검색)

.imgscan


표현식을 헥사, 8진수, 2진수, 시간형, Float형, Double 형으로 변환한 형태로 보여준다

.formats [표현식]

디버그 레지스터 확인
0:000> rm 0x20;r
dr0=00000000 dr1=00000000 dr2=00000000
dr3=00000000 dr6=00000000 dr7=00000000
ntdll!KiFastSystemCallRet:
7c93eb94 6a01 push 1

범용레지스터 확인
0:000> rm 0x01;r
eax=00000000 ebx=00000000 ecx=00000006 edx=7c9ac080 esi=7c93e88e edi=00000000
eip=7c93eb94 esp=0007fde8 ebp=0007fee4 iopl=0 nv up ei pl zr na pe nc
ntdll!KiFastSystemCallRet:
7c93eb94 6a01 push 1

레지스터 값 변경
r eip=7c931230
r eax = @ebx
r zf=0


특정 주소에 어셈블 코드 삽입
a <위치>
예) a eip
00401000 sub esp, 10


특정 주소에 원하는 값 삽입
e[옵션] <주소>
예) eb <주소>
00401000 90
00401001 90
00401002 90


현재 보여주는 숫자의 진수바꾸기
n <base>
예) n 8
예) n 16 # 16진수
예) n 10 #10진수로 보여줌


메모리가 참조하고 있는 데이터를 살펴보기
예) dpa esp 현재 스택을 아스키형태로 보여줌
예) dpu esp 현재 스택을 유니코드형태로 보여줌


메모리의 내용을 심벌과 매핑시켜서 보여줌
예) dds esp 현재 콜 스택을 보여줌


반응형
반응형

출처 : http://ospace.tistory.com/189


소켓 관련 자세한 내용 joinc를 참고!!

: http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/AdvancedComm/SocketOption


들어가기

소켓 프로그래밍에서 비동기 방식으로 처리를 많이 사용하고 있다. 장점도 있고 단점도 있다. 그러나 최근 고성능 서버 프로그램 작성할 때에는 거의 대부분이 비동기 방식으로 처리한다.
이런 부분의 장점과 단점은 인터넷에 잘 나와있으니 알아서 찾아보시고, 여기에서는 서버 보다는 클라이언트에 집중해보려고 한다. 즉 접속를 하는 시스템을 집중하겠다.

사실 서버에서도 접속을 요청할 수 있다. 이는 push방식 인가 pull 방식 인가에 따라서 서버에서도 사용할 가능성 있다. 이런 push와 pull도 인터넷에서 검색하시길 바란다.

이제 본론으로 들어가보자.


Connect 함수

기본적으로 소켓 생성이 끝나고 연결만 남은 상태라고 보자. 그리고, 대부분 소켓 프로그래밍에 대해 기초적인 부분을 알고 있다고 생각해서 진행하겠다.

int connect(int, const struct sockaddr*, socklen_t); // for linux
int connect(SOCKET, const struct sockaddr*, int); // for windows

많이 보던 함수라서 익숙 할 것이다. 각 인자마다 들어가는 타입이 틀리지는 모르지만, 결국 같은 값을 사용한다. 일반적인 동기 접속이 이뤄지는 경우 반환 값은 다름과 같다.

동기접속 Return Value
성공: 0 반환
실패: -1 (Linux), SOCKET_ERROR(Windows)


비동기 인경우는 조금 다르게 처리한다. 리턴 값이 바로 접속이 성공하면 0 이지만, -1 값이 실패로 처리되지 않는다. -1은 비동기 처리에서는 기본적이며, Linux는 ierrno값을 이용하여 현재 처리되는 상태를 확인하고 Windows는 WSAGetLastError()를 사용해서 에러를 확인한다.

비동기접속 Return Value
성공: 0 반환
진행중: -1 반환. errno값을 비교하여 진행 상태 확인
errno == EINPROGRESS(linux), EAGAIN
WsaGetLastError() == WSAEWOULDBLOCK

한 가지 주의할 것은 linux에서는 처리 중인 상태를 errno값에서 EINPROGRESS를 사용한다. 간혹 EAGIN를 사용하는 프로그램이 있다. 이부분을 좀더 검증이 필요하다.



연결 상태 확인

connect를 호출해서 연결을 한다고 해도, errno 값이 EINPROGRESS라고 해서 연결이 성공적으로 완료되었다고는 말하기 힘들다. 비동기이기 때문에 그 결과를 반환 값에 넣을 수 없다. 그 때 필요한 것이 getsockopt()를 이용한 것이다.

int getsockopt(int, int, int, void*, socklen_t*); // for linux
int getsockopt(SOCKET, int, int char*, int*);   // for windows
그럼 비동인 경우 연결 결과를 가져오는 코드는 다음과 같다.
int error = 0;
socklen_t len = sizeof( error );
if( getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0 ) {
    // 값을 가져오는데 에러 발생
    // errno을 가지고 에러 값을 출력
    // 연결 오류로 처리
}

getsockopt()인 경우는 BSD와 Solaris에서 결과가 매우 다르다. Solaris는 확인하기 어렵고 일단 Linux와 Widows을 중심으로 살펴보았다.

Linux Return Value
성공: 0
실패: -1, 에러 종류는 errno에 저장됨

Windows Return Value
성공: 0
실패: SOCKET_ERROR, 에러 종류는 WSAGetLastError()로 가져옴


둘다 SO_ERROR 값 획득에 성공하면, error를 통해 연결 상태에 대한 결과를 확인해 볼 수 있다.

Linux
ECONNREFUSED: 연결 거부
ETIMEDOUT: 연결 대기 시간 초과
Windows
WSAECONNREFUSED: : 연결 거부
WSATIMEDOUT: : 연결 대기 시간 초과


error 값을 가지고 위의 값과 비교해보면 알 수 있다.
당연히 error 값이 0이면 에러가 없으므로 성공적으로 접속했다는 의미이다.

최종코드

다음은 위의 결과를 정리한 코드이다. 물론 직접 테스트해본 코드가 아니기 때문에 컴파일시 에러가 발생할 수 있다. 그리고 기본 플랫폼은 Linux로 정했다.

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
if( fcntl( fd, F_SETFL, O_NONBLOCK) == -1 ) {
    return -1; // error
}
// Windows인 경우
// unsigned long nonblock = 1; 
// nonblock 설정
// ioctlsocket(fd, FIONBIO, &nonblock);
// struct sockaddr_in 형의 peer를 초기화함
int result = connect (fd, (struct sockaddr*)&peer, sizeof(peer));
if( 0 == result ) {
    // 연결 성공
} else if ( EINPROGRESS == errno ) {
    // 비동기 연결 이벤트로 등록
} else {
    // 연결 실패
}

비동기 연결 이벤트에 의해서 해당 이벤트가 활성화되어 실행하는 경우, getsockopt()를 이용해서 결과를 확인한다.

// 연결 이벤트 헨들러
int error = 0;
socklen_t err_len = sizeof(error);
if( getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*) &error, &len) < 0 ) {
    // 결과값 갖고 오는데 에러 발생
    // 연결중 에러 발생으로 errno 값으로 결과 확인
    // 에러 리턴
}
if( 0 != error ) {
    if( ECONNREFUSED == error ) {
        // 연결 거부로 연결 실패
        // 에러 처리
    } else if( ETIMEOUT == error ) {
        // 연결 대기 시간 초과로 연결 실패
        // 에러 처리
    }
    // 원인 모를 에러?
    // 알아서 처리 ㅡ.ㅡ;
}
// error가 0이기 때문에 연결 성공 ^^


이상입니다. 안에 코드는 두서없이 작성한 것이라서 나름대로 적당히 수정하면 되겠죠. error값은 switch문을 사용하는 식으로 말입니다.



결론

비동기 연결에 대해서 다룬 경우는 거의 없다. Stevnes 아저씨의 책을 많이 참고 했다. 이를 이용해서 다중 연결 요청을 만드는 프로그램을 작성할 수 있었다.

마지막으로 위에서 사용한 헤더 파일에 대해서 정리해보았다. 물론 다 알고 계신분은 상관없지만, 그 때마다 찾아쓰는 나와 같은 사람은 헤더파일 알아내느라 참 힘들다. ㅡ.ㅡ;

Windows
WinSock2.h: connect(), getsockopt(), WSAGetlastError(), WSAECONNREFUSED, WSAETIMEOUT

Linux
sys/socket.h: connect(), getsockopt()
errno.h: ECONNREFUSED, ETIMEOUT 정의

이상입니다. 모드 즐프하세요. ospace.

참조

[1] Stevens, Unix Network Programming Volumn1 2ed
[2] man, connect, getsockopt
[3] MSDN, connect, getsockopt


-------------------------------------------------------------------------------------------------------
안녕하세요.

저 같은경우 비동기 커넥트시

connect 후 커넥트가 진행중이면 read 셋,write 셋, except 셋 에다
소켓을 셋한후 select 후 write 셋을 검사하여 write 셋에 소켓이
셋되있으면 접속된걸로 간주하고 except 셋에 소켓이 셋 되잇으면
실패한걸로 간주합니다.

여기서 궁금한거는 최초의 select 에서 아무런 이벤트(접속성공,실패)를
감지하지 못했을경우 다시 감지를 하기 위해서 write 셋과 except 셋에
다시 소켓을 셋해야 하는지 궁금합니다. 당연히 그래야 할것 같은데
제가 테스트(윈도우에서)할때는 최초의 select 에서 접속성공 또는 실패
를 알수 있어서 그런가보다 하고(최초의 select에서 접속성공실패여부 확인)
알고 있었습니다.

리눅스(SuSE) 에서 상황을 접속실패로 해놓고(접속할서버를닫아놓고) 테스트
해보면 최초의 select 호출후 read,write,except 의 각 fd_set 의 변화를
살펴봤더니 read 셋과 write 셋에 소켓이 셋 되있었습니다
(connect 호출후 read,write,except 에 소켓을 셋해두었습니다)

상황이 접속 실패다 보니 except 에 소켓이 셋 되길 바라고 있었지만
황당하게도 write 셋 말고도 read 셋까지 소켓이 셋되있어서 머리에서
쥐가날 지경입니다. 혹시 이런 현상을 겪으신분 계시는지 궁금합니다.

man 페이지를 살펴보면

------------------
The socket is non-blocking and the connection cannot be completed
immediately. It is possible to select(2)
or poll(2) for completion by selecting the socket for
writing. After select indicates writability, use get?
sockopt(2) to read the SO_ERROR option at level
SOL_SOCKET to determine whether connect completed success?
fully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is
one of the usual error codes listed here, explaining
the reason for the failure).

-----------------------

위와같이 소켓이 write able( 셀렉트 호출이후 write set 에 셋되었을경우 )
되었을경우
getsockopt 로 옵션을 SO_ERROR 로 줘서 결과를 얻어 접속성공이냐 실패냐를
알아보라고 했는데 성공해야 할경우나 실패햐애 할 경우에나 항상 결과는
성공으로 나옵니다.

코드는
int ret = getsockopt( sock, SOL_SOCKET, SO_ERROR, &error, &error_size );
이며 error 값과 ret 값이 0 이 아닐경우를 접속실패로 간주했습니다.

사실상 getsockopt 를 이용한 비동기 커넥션 성공여부 판단은 포기하고 있는
실정이지만 혹시 이에대해 좀 아시는분 참고말씀 부탁 드립니다.

아래글에도 이와비슷한 글을 올렸는데 어느분께서
접속성공 실패 여부를 떠나서 일단 무조건 select 이후 write 셋에는
소켓이 셋되있다고 하시더군요(UNP 에 나온다고말씀)
만약 접속이 실패든 성공이든 무조건 write 셋에 걸린다면 select 이후
이벤트체크에서 걸린 소켓(즉 write 셋에 걸려버린소켓)은 어떻게
접속이 성공했는지 실패했는지 알수가 있는지 궁금합니다.

말이 길었는데 요약하자면
보통 select 를 이용한 비동기 소켓 커넥션은 어떤식으로 이루어지는지와
최초의 select 호출이후 아무런 이벤트를 감지하지 못햇을경우
다시 read,write,except 셋에 접속성공 여부를 감지할 소켓을 셋하고
감지할때까지 이와같은일을 반복하는지..

또 저같은경우 접속실패 상황에서 왜 read 와 write 셋이 셋되서
나오는지...

조그만 참고말씀이라도 귀담아 듣겠습니다.
감기조심하시고 읽어주셔서 감사합니다.


--------------------------------------------------------------------------------------------------------

UNIX에서는 Winsock과 다르다고 하네요
UNIX에서는 연결이 성공했는지의 여부를 알리기 위해서
읽기와 쓰기가 모두 가능하게 만듭니다.
커널 구현이 그런걸 ... 왜 그렇냐고 따지기 보다 ㅎㅎ 그냥 쓰셔야 겠죠

일단 select() 리턴후

readable도 아니고 writable도 아니라면
소켓은 연결이 되어 있는 상태로 판단가능하구요

그다음엔
getpeername()을 호출해서 정상리턴이면 연결된 상태입니다.

만약 getpeername()이 ENOTCONN을 리턴하면 연결안된상태이구요.
getsockopt() 호출해줘서 아직 가지고 오지 않은 에러코드를 가지고 오신후에 error코드를 살펴보시면 됩니다.
만약 getsockopt() 자체가 실패하면
errno가 getsockopt()호출에 대한 실패를 저장하겠죠?(맞나 ㅡ.ㅡ, 불확실..)

제가 말씀 드린 부분을 isconnected() 함수로 만들어서

사용하시면 될것 같네요


--------------------------------------------------------------------------------------------------------

일단 저의 상황에 대해 말씀드리자면

전 커넥트 타임 아웃 함수를 만드는것이 아닙니다.

UNP 책이 없어 게시판뒤져서 다른분들이 예제올리신거 봤는데

비동기 커넥트 타임아웃 함수더군요.

저는 반응시간에 민감한 (중간에 거의 멈춤없이 계속돌아가는)

서버프로그램을 짜고있고 다른 서버와의 연동을 위해 타 서버로

접속하는 클라이언트 모듈을 짜고 있습니다. 여기서 타 서버로 접속시

블럭 또는 시간지연이 안되게 하기 위해 비동기 connect 를 이용하며

이 클라이언트모듈을 모든 서버 소켓및 차일드소켓과 같이 관리 합니다.

일단 비동기 connect 에 대한 방법은 많이 파악하고 있었는데 계속 이상한

오동작을 해 많이 혼란스러웠던것 같습니다. 지금 오동작을 하는 상황을 판단

했는데 다음과 같습니다.

접속하는 서버가 꺼져있는상황에서.
(이 서버프로그램은 타서버로 접속하는 클라이언트 소켓만 관리 하는
것이 아니라 차일드 소켓들도 관리합니다. 그래서 따로 접속용 select 를
만들어서 돌리지 않으며 테스트 할때는 클라이언트 소켓만 관리해서
테스트 했습니다)

1. 목적 서버가 로칼호스트일경우(즉 같은 컴퓨터) ex)127.0.0.1

select 를 통과하면 read 셋과 write 셋이 동시에 셋 됩니다.(select 리턴값 2 )

2. 목적 서버가 타 호스트일경우(remote) ex)192.168.1.1

select 를 통과하면 아무 fd_set 도 셋 되지 않습니다.

그래서 접속실패 경우 어떤 상황이 정상인것으로 판단 해야 하는것인가
에 대한 고민을 많이 하다 위 1번상황(목적 서버 꺼짐, 목적서버 로칼호스트)
을 고려하여 다음과 같이 했습니다

일단 read set 체크 루틴은 데이타가 오거나 접속이 끊긴것을 처리해야
하는 루틴이므로 비동기 접속에 대한 실패여부를 판단하는 루틴을
넣는것은 안좋은것 같아 어차피 접속이 안됬으면 recv 에서 접속 끊긴것
으로 판단하여 소켓을 닫는 루틴이 호출될것이므로 그냥 둠.

read set 이 셋됨과 동시에 write set 도 셋 되므로 별도의 처리가 필요하
다고 판단.

write set 이벤트 발생처리 루틴은
write set 될때 접속요청중인 소켓이였으면(따로 소켓클래스에 셋팅해둠)
접속성공처리를 하는 루틴임.
하지만 접속 실패의 경우도 write set 이 발생하므로 어떻게 할까 고민하다
위 write set 이벤트를 처리하기전 read set 에서 소켓을 닫으므로
소켓이 닫혀 있으면 continue 처리.

이렇게 하였습니다. 일단 이렇게 하니 문제없이 잘 동작은 하는데

마지마으로 궁금한점!

왜 접속 실패하엿을경우 exception set 은 발생하지 않을까??

exception set 은 실제로 거의 쓰이지 않는 set 일까 하는점입니다..

긴글 읽어주셔서 감사합니다. ^^ 참고 말씀 기달리겠습니다.

--------------------------------------------------------------------------------------------------------


UNP 에서는 넌블러킹 소켓으로 connect 를 했을 때 생기는 문제점과 connect 후에 처리해야 할 일 등을 기술하고 있습니다. 그 예제 코드만을 가지고서 말씀하시지 마시고, 먼저 읽어보시는 것이 도움이 됩니다.

UNP 구현과 달리 select 를 중앙집중식으로 하시는가 봅니다. UNP 구현의 select 부터를 작성하시는 코드에 적절히 배치하면 될 것이구요.

그리고, 1. 번의 경우에 어떻게 처리해야 하는지 UNP에 얘기되어 있고, 2. 번의 경우 select 에 시간을 주어서 대기했다면 어떻게든 (접속되든 안되든) 해당 fd_set 을 (최소한 writable) 세팅해줍니다. 만약 기다리지 않게 하고 조사하거나 시간이 만료되었다면, 접속성공/실패 여부를 모르고 시간만료에 해당하는 0을 리턴하고 아무런 fd_set 을 설정하지않고 리턴될 것입니다. 중앙에서 select 한다면 판단이 애매해질 수 있겠습니다. 다른 fd와 섞여서 select의 리턴값만으로는 넌블러팅 connect의 시간만료인지를 알 수 없을테니, 해당 fd 의 타임아웃 시간인지를 판단하는 코드가 추가되고 시간만료이면 fd_set 세팅이 없을 때라는 조건이 있어야 실패로 확인되겠습니다.

정 책이 없다면... 서점에서라도 보실 수 있지 않습니까. 해당하는 페이지가 몇페이지 안되니까요. 보기만해도 좋은 결론에 도달할 수 있다고 생각합니다.

UNP 를 먼저 꼭 구해서 읽어보시면 좋겠습니다. 먼저 경험한 사람의 충실한 경험담이 있습니다. 혼자서 고생하시지 마시고, 쉽게 정보를 구할 수 있다면 이용하는게 맞다고 봅니다.

UNP 는 내용을 본다면 책값이 너무 싼 편에 속한다고 생각합니다.


--------------------------------------------------------------------------------------------------------

예 그렇습니다. 저같은경우 timeval 안에 값을 0,0 으로 셋팅합니다.
그래서 read 나 write 이 셋 되지 않고 셀렉트가 0을 리턴하는군요.
궁금한점은 select 가 0을 리턴했어도 다음번,또 다음번 select 호출시에는
read 나 write 가 왜 셋되지 않을까 입니다. timeval 값을 0,0 으로 하면
select 가 read 나 write 을 셋하기에는 너무 짧은 시간인지요?

UNP 번역판을 전 회사에서 본적이 있는데 번역기를 돌린건지
번역이 이상하더군요.. 살려고 했는데 번역본에 대한 실망때문에
망설이고 있었습니다. 이참에 맘먹고 장만해야겠네요..^^


--------------------------------------------------------------------------------------------------------

마지막 글에 질문이 있었군요... 처제네 집들이를 하는 와중에 쓴글이라 경황이... -_-;

넌블러킹 connect 를 호출 후에 성공이냐 실패냐를 정확하게 판단할 수 있는 시점은 select 에서 넘어오는 순간입니다. 만약 select 를 대기없이 조사만하도록 했다면 (만료시간 0) 이것은 connect 시도의 상태만을 알아보는 것이므로 성공/실패 여부를 알아보기에는 조금 힘든 방법 같습니다.

일반적으로 상대편 서버가 다운되어 있을 때, connect 를 시도하면 보통 60초정도 (환경마다 다르겠죠) 있다가 성공/실패 여부를 돌려준다고 합니다. 여러번 select 를 호출했다고 해도 이 시간이 되기전에는 어떻게 된 것인지 알 수가 없는 것이고, rasungboy 님처럼 만료시간 0으로 한다면 그 시간이 될 때까지는 계속 0만을 리턴하는 상황이겠습니다. (같은 호스트라면 즉시 성공/실패를 판단)

결국 넌블러킹 connect 후에 select 로 일정 시간을 대기해야 한다는 결론입니다. 하지만...

지금 하시고자 하는 것이 여러 다른 일반 fd 들과 함께 connect 시도도 병행하고자 하는 것으로 보입니다. 이럴 경우 문제가 있는데, select 에 주어지는 시간 만료는 여러 fd 들에게 독립적인 것이 아니라 select 자체에 대한 시간 만료이기 때문에 시간에 대한 처리를 따로 하셔야 한다는 것입니다.

각 fd 별로 타임 아웃 시간을 각각 적용하기 위해서는 각 fd 별 타임 아웃을 우선 순위 큐 등을 이용해서 가장 짧은 시간을 select 의 시간 만료값으로 주고 처리해야 합니다. 이것을 제대로 구현하기가 좀 까다롭고 테스트하기도 귀찮고... 좀 그렇습니다...

select 로 분기하는 구조로 간다면 이래저래 처리해야 할 것도 많아지고 상태 머신이 아주 복잡해지는 경향이 있습니다. (간단한 처리 서버라면 상관없겠지만요...) 그래서 대부분 그냥 일반 쓰레드를 사용하거나 특수하게 서버용 사용자-공간 쓰레드를 사용하기도 합니다.

쓰레드라는 것이 막 쓰기에는 그렇지만 좀 신경을 쓴다면 그리 효율을 떨어뜨리지 않고서도 로직의 흐름대로 프로그래밍할 수 있어서 좋다고 생각합니다. (물론 남용은 금물...)


반응형
반응형

출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/4200/WSAGetLastError



int WSAGetLastError(void);


매개변수

이 함수는 매개변수가 없다.

반환 값

가장 최근 발생한 소켓에러에 대응되는 에러코드를 반환한다.

설명

다중 쓰레드 프로그램일 경우 모든 쓰레드의 소켓에 대해 에러값을 측정한다. 이 경우 어느 쓰레드의 소켓함수 호출에서 에러가 발생한 건지 명확하지 않을 수 있다. 특정한 윈도 소켓에 에러가 발생하면, 그에 적절한 에러코드를 확인해서 반환한다. getsockopt()함수를 SO_ERROR 매개변수로 호출한 에러코드와는 다를 수 있다.

특정 소켓함수가 성공했다고 해서, 가장 최근의 소켓에러값이 리셋되지 않는다. 에러코드를 리셋하려면 WSAGetLastError 함수의 iError매개변수를 0으로 호출 해야 한다.

비동기 네트워크로 메시지로에서 IParam'매게변수로 전달되는 에러 값은 WSAGetLastError과 다를 수 있다.

에러코드 종류

이름 설명
WSA_INVALID_HANDLE 6 지정된 이벤트 객체 핸들이 잘못 되었다.
WSA_NOT_ENOUGH_MEMORY 8 메모리가 충분하지 않다.
WSA_INVALID_PARAMETER 87 하나 이상의 잘못된 인자가 사용됐다.
WSA_OPERATION_ABORTED 995 overlapped(:12) 연산이 중단 되었다.
WSA_IO_INCOMPLETE 996 Overlapped 입출력 이벤트가 신호 상태가 아니다.
WSA_IO_PENDING 997 Overlapped 연산은 나중에 완료될 것이다. 중첩 연산을 위한 준비가 되었으나, 즉시 완료되지 않았을 경우발생
WSAEINTR 10004 WSACancelBlockingCall()에 의해 블록화 호출이 취소: Interrupted system call
WSAEBADF 10009 잘못된 파일 기술자가 사용되었음
WSAEACCES 10013 요청한 주소가 브로드캐스트 주소인데 setsockopt()로 SO_BROADCAST 가 설정되지 않았다.
WSAEFAULT 10014 잘못된 주소를 사용했음
WSAEINVAL 10022 바인딩 실패. 이미 bind된 소켓에 바인드하거나 주소체계가 일관적이지 않을 때
WSAEMFILE 10024 너무 많은 파일이 열려있음
WSAEWOULDBLOCK 10035 non overlapped 소켓 : 비 봉쇄 소켓에 아직 읽을 데이터가 없음, overlapped(:12) 소켓 : 너무 많은 중첩 입출력 요구가 있음
WSAEINPROGRESS 10036 블록화 함수가 진행되는 동안 부적절한 윈속 API함수가 호출.
WSAEALREADY 10037 비봉쇄모드 소켓에서 아직 진행중인 작업임. (connect가 완료되지 않은 상태에서 connect 함수의 호출등..)
WSAENOTSOCK 10038 잘못된 소켓기술자를 사용했음
WSAEDESTADDRREQ 10039 목적지 주소를 명시하지 않았음
WSAEMSGSIZE 10040 송수신에 사용된 데이터가 버퍼의 크기를 초과해서 크기에 맞게 잘렸음
WSAEPROTOTYPE 10041 소켓에 맞지 않는 프로토콜을 사용했음
WSAENOPROTOOPT 10042 잘못된 옵션을 사용했음. 지원되지 않는 옵션으로 getsockopt함수를 호출하는 등.
WSAEPROTONOSUPPORT 10043 윈속에서 지원하지 않는 주소체계를 사용했음
WSAESOCKTNOSUPPORT 10044 소켓타입이 지원하지 않는 주소체계를 사용했음
WSAEOPNOTSUPP 10045 소켓이 지원하지 않는 명령을 사용했음. listen()함수를 데이터그램 통신 (SO_DGRAM)에서 호출
WSAEPFNOSUPPORT 10046 지원하지 않는 프로토콜을 사용했음
WSAEAFNOSUPPORT 10047 윈속에서 지원하지 않는 주소체계를 사용했음
WSAEADDRINUSE 10048 지정된 주소가 이미 사용 중임
WSAEADDRNOTAVAIL 10049 사용할 수 없는 주소임
WSAENETDOWN 10050 네트워크 서브 시스템에 문제가 있음. 네트워크 접속 끊김등.
WSAENETUNREACH 10051 네크워크에 접근할 수 없음
WSAENETRESET 10052 네트워크 재설정으로 연결이 끊어졌음.
WSAECONNABORTED 10053 타임아웃 혹은 상대방의 접속종료들과 같은 소프트웨어적인 문제로 연결이 끊겼음.
WSAECONNRESET 10054 연결이 원격 호스트에 의해 재설정되었음.
WSAENOBUFS 10055 남아있는 버퍼공간이 없어서 소켓을 사용할 수 없음
WSAEISCONN 10056 이미 연결이 완료된 소켓임. connect로 연결이 완료된 소켓에 다시 connect를 시도할 경우
WSAENOTCONN 10057 연결되지 않은 소켓임. 연결되지 않은 소켓에 읽고 쓰는 경우
WSAESHUTDOWN 10058 소켓이 종료되었음. 종료된 소켓에 데이터를 읽고 쓰려 경우
WSAETOOMANYREFS 10059 Too many references
WSAETIMEDOUT 10060 접속시도 제한 시간 초과
WSAECONNREFUSED 10061 서버가 연결시도를 거절함. 수신 대기열이 가득찬 상태에서 클라이언트의 connect 호출이 있을 경우
WSAELOOP 10062 너무 많은 심볼릭링크가 사용되었음
WSAENAMETOOLONG 10063 파일이름이 너무 김
WSAEHOSTDOWN 10064 호스트 다운
WSAEHOSTUNREACH 10065 호스트로의 경로를 설정할 수 없음
WSAENOTEMPTY 10066 네트워크 서브시스템이 아직 통신할 준비가 되어 있지 않음. WSAStartup에 의해 반환
WSAEPROCLIM 10067 너무 많은 프로세스가 생성되었음
WSAEUSERS 10068 사용자가 너무 많음
WSAEDQUOT 10069 디스크 허용 할당량 초과
WSAESTALE 10070 Stale NFS file handle
WSAEREMOTE 10071 Too many levels of remote in path
WSAEDISCON 10101 종료가 진행중임
WSASYSNOTREADY 10091 네트워크 서브시스템이 아직 통신할 준비가 되어 있지 않았음
WSAVERNOTSUPPORTED 10092 윈속이 지원하지 않는 프로토콜 버전을 사용했음. WSAStartUp()에서 반환
WSANOTINITIALISED 10093 WSAStartup() 함수가 성공적으로 실행되지 않은 상황에서 윈속 함수를 호출했을 때
WSAHOST_NOT_FOUND 11001 요청된 호스트를 찾을 수 없음
WSATRY_AGAIN 11002 요청된 호스트를 찾을 수 없음
WSANO_RECOVERY 11003 복구할 수 없는 에러가 발생하였음
WSANO_DATA 11004 요청한 이름이 유효하지만 정보를 찾지 못했음. gethostbyaddr()등에서 발생 


반응형
반응형
출처 : 리그 오브 레전드 홈페이지

소환사 여러분

4월 15일(화) 03:08부터 적용되는 업데이트 내용입니다.

일반 게임
• 소환사의 협곡과 뒤틀린 숲에서 부활 소환사 주문을 사용할 수 있습니다.


반응형
반응형

출처 : 리그 오브 레전드 홈페이지


소환사 여러분

4월 11일(금) 업데이트 내용입니다.


버그 수정

• 08:00부터 적용되었습니다.
• 로딩 화면의 스킨 이름 표기 오류가 수정되었습니다.


신규 플레이어용 무료 챔피언

• 05:40부터 적용되었습니다.

• 신규 플레이어용 무료 챔피언이 다시 적용되었습니다.

• 신규 플레이어들이 게임을 익히는 동안, 몇 명의 정해진 챔피언을 무료로 플레이할 수 있게 하여

게임을 좀 더 잘 익힐 수 있도록 도입한 기능입니다. 배우기 쉽고 재미있게 플레이할 수 있는

챔피언을 선정했습니다.

• 리그 오브 레전드를 시작하는 플레이어들은 이제 일정 레벨에 이르기 전까지 사전 지정된 몇 명의

챔피언만을 무료로 플레이할 수 있습니다. 레벨이 오른 후에는 다른 플레이어와 마찬가지로

로테이션되는 챔피언을 무료 선택할 수 있습니다.

편리한 팀 구성
• 03:45부터 적용되었습니다.
• 편리한 팀 구성 이용 가능 레벨이 25레벨로 조정 되었습니다.

반응형
반응형

출처 : 리그 오브 레전드 홈페이지


소환사 여러분

4월 10일(목) 09:00부터 적용되는 업데이트 내용입니다.

버그 수정
• 스킨 선택 화면에서 마스터 이 챔피언의 클래식 스킨이 중복 표시되던 버그를 수정했습니다.

반응형
반응형

출처 : http://forum.falinux.com/zbxe/index.php?document_srl=560877&mid=lecture_tip




에프에이리눅스에서 판매하는 보드에서 루트파일 시스템을 yaffs 파일 시스템으로 설정하고, /tmp 를 tmpfs 로 설정하기 위해서는
다음과 같은 방법으로 설정하면 됩니다.

 

tmpfs는 램의 공간을 사용하기 때문에 전원이 OFF되면 저장된 데이터가 모두 삭제되는 휘발성 공간입니다.

 

1. tmpfs 파일 시스템이 존재하는지를 확인 합니다.

 

   [root@falinux ~]$ cat /proc/filesystems 
   nodev sysfs
   nodev rootfs
   nodev bdev
   nodev proc
   nodev binfmt_misc
   nodev debugfs
   nodev sockfs
   nodev usbfs
   nodev pipefs
   nodev anon_inodefs
   nodev tmpfs
   nodev devpts
   ext3
   ext2
   nodev ramfs
   vfat
   msdos
   nodev nfs
   nodev nfs4
   nodev nfsd
   nodev autofs
   yaffs
   yaffs2
   nodev mqueue
   nodev rpc_pipefs

 

 여기서 tmpfs 파일 시스템이 존재하지 않으면 커널에서 다음 옵션을 활성화 시켜야 합니다.
   
   File systems  ---> 
        Pseudo filesystems  --->
         [*] Virtual memory file system support (former shm fs)
         [*]   Tmpfs POSIX Access Control Lists 
           
    

2. mount 옵션을 사용하여 tmpfs를 사용하는 방법

 

   [root@falinux /]$ mount -t tmpfs -o size=20M tmpfs /tmp

   [root@falinux /]$ df
   Filesystem 1K-blocks Used Available Use% Mounted on
   /dev/root 506880 19836 487044 4% /
   tmpfs 20480 1164 19316 6% /tmp

   [root@falinux /]$ mount
   rootfs on / type rootfs (rw)
   /dev/root on / type yaffs2 (rw)
   /proc on /proc type proc (rw)
   /sys on /sys type sysfs (rw)
   none on /dev/pts type devpts (rw,gid=5,mode=620,ptmxmode=000)
   usbfs on /proc/bus/usb type usbfs (rw)
   tmpfs on /tmp type tmpfs (rw,size=20480k)

 

 

3. yaffs 루트파일 시스템에서 부팅시 tmpfs를 마운트하는 방법

 

   에프에이리눅스에서 제공하는 램디스크는 /etc/fstab 파일을 사용하지 않습니다. 
   따라서 /etc/rc.d/rc.sysinit 에서 마운트를 해 주어야 합니다.

  

   [root@falinux /]$ vi /etc/rc.d/rc.sysinit

    26      # mount sysfs, devpts filesystem
    27      mount -n -t sysfs /sys /sys
    28      mount /dev/pts
    29 
    30      # moout tmpfs filesystem 20Mbyte
    31      mount -t tmpfs -o size=20M tmpfs /tmp

   [root@falinux /]$ reboot -f

   [root@falinux /]$ df
   Filesystem 1K-blocks Used Available Use% Mounted on
   /dev/root 506880 19836 487044 4% /
   tmpfs 20480 1164 19316 6% /tmp

 

반응형

'OS > LINUX Common' 카테고리의 다른 글

리눅스 LVM 생성  (0) 2015.08.20
Linux에서 ZFS 파일 시스템 구축.  (0) 2015.03.25
GNU tar의 특이성 , 체크섬 오류  (0) 2013.07.09
리눅스 vsftpd 설치 / 설정.  (0) 2011.10.14
리눅스 계정관리 ----LINUX  (0) 2011.08.21
반응형

출처 : 리그 오브 레전드 공식 홈페이지


소환사 여러분,

2014 시즌도 이제 막 중반에 접어들고 있습니다. 프리시즌 때처럼 대대적인 변화가 이루어질 예정은 없으나, 필요하고 가능한 부분에선 평소보다 좀더 큰 변경이 진행될 수 있습니다. 이번 패치에선 여러 서포터 아이템의 재료 아이템을 조정하고 두 개의 기본 서포터 아이템을 추가했습니다. 현재 전장의 판도를 완전히 바꿔버리려는 것은 아니지만, 이 변경으로 서포터가 주문력 아이템을 구매해도 팀원들과 보조를 맞춰 성장할 수 있을 것입니다. 플레이어 여러분이 입맛대로 활용하실 수 있도록, 앞으로 서포터 챔피언의 아이템 구성이 좀 더 다양해지도록 할 계획입니다.

또한 이번 패치에선 렝가와 그라가스에 대한 '게임플레이 업데이트'가 이뤄집니다. 렝가에겐 팀 전투에 뛰어들어 공을 세울 수 있는 가능성이 새롭게 열렸으며, 그라가스는 술통을 굴려 멀리 있는 적을 처치하는 능력이 떨어진 대신 근접 난투 능력이 향상되었습니다. 두 챔피언은 게임이 모 아니면 도 식으로 풀리는 경우가 많았습니다. 잘 풀리면 주로 적을 눈 깜빡할 사이에 처치해버리는 식으로 화려한 성공을 거두기도 하지만, 뒤쳐졌을 때는 팀에 거의 도움이 되지 못했죠. 자세한 설명은 아래에서 다시 드리겠지만, 이제 더 다양하고 재미있는 플레이를 펼치실 수 있을 것입니다. 전투에서 멋지게 활약할 수 있는 무기가 생겼으니까요. 예를 들어 배치기라든가, 배치기라든가, 배치기 말이죠.

게임 클라이언트

게임 로비

게임 로비에서 방의 생성 이력을 더 정확히 알 수 있도록 약간의 개선이 이루어졌습니다.
  • 게임 로비를 생성한 플레이어가 방장 권한을 다른 플레이어에게 넘기면 해당 플레이어의 상태가 '참여함'이 아니라 '방장'으로 표시됩니다. (다음 패치부터 '개설자'로 수정됩니다.)

맨 위로 돌아가기

편리한 팀 구성

  • 팀원이 챔피언, 포지션, 역할군 등을 확정하지 않은 상태라면 팀장의 화면엔 선택 중임을 나타내는 애니메이션이 표시됩니다.
  • 이제 팀장이 먼저 친구를 초대한 후 챔피언, 포지션, 역할군을 설정하게 할 수 있습니다.
  • 이제 게임 초대 현황이 제대로 업데이트됩니다.

맨 위로 돌아가기

전투 메시지

가독성을 높이고 사용 언어에 관계 없이 좀 더 일관된 게임 플레이를 경험하실 수 있도록 골드 획득 및 치명타 적용 시의 텍스트 메시지를 변경했습니다.
  • 골드 획득은 이제 '골드'가 아니라 금화 모양 아이콘으로 표시됩니다.
  • 치명타 적용은 이제 느낌표가 아니라 폭발하는 듯한 아이콘으로 표시됩니다.

맨 위로 돌아가기

게임플레이 업데이트

그라가스

그라가스의 근접 전투 능력이 상향됩니다! 취중 분노는 다음 기본 공격을 강화해 적의 최대 체력에 비례해 증가하는 추가 마법 피해를 입히며, 몸통 박치기는 적중한 적을 기절시키고 뒤로 밀어냅니다. 대신, 술통 굴리기에 둔화 효과가 추가되긴 하지만 술통 굴리기와 술통 폭발 피해량이 감소되어 장거리 공격력이 하향되죠. 역시 술통으로 적을 쓰러뜨리는 저격수보단 뚱뚱하고 호전적인 싸움꾼이 그라가스에겐 어울리니까요.

그라가스의 컨셉은 전투에 뛰어들어 난장을 벌이는 술취한 싸움꾼입니다. 그러나 그라가스 플레이어들의 숙련도가 높아지면서 높은 주문력 계수를 활용해 멀리서 적을 처치하고, 몸통 박치기와 취중 분노는 도망가는 데에 활용하는 플레이가 유행하게 되었죠. 컨셉과는 다른 기발한 전략이 활용되는 것은 바람직하지만, 그라가스를 원거리 마법사처럼 플레이하면 게임이 모 아니면 도로 흘러가게 마련입니다. 게임이 잘 풀리면 적을 일격에 쓰러뜨릴 수 있지만, 뒤쳐지는 상황에선 술취한 싸움꾼이 아니라 우울증 환자에 지나지 않게 되죠. 이제 그라가스는 커다랗고 튼튼한 몸통으로 적을 냅다 들이받아버리는 술취한 싸움꾼으로 활약할 수 있을 것입니다.

일반

레벨당 마법 저항력: 0 1.25
기본 이동 속도 340 330

기본 지속 효과 - 서비스 시간

체력 회복량: 4초간 최대 체력의 2% 즉각 최대 체력의 4%
신규재사용 대기시간: 8초

Q - 술통 굴리기

신규둔화 효과: 2초간 30/35/40/45/50%
재사용 대기시간: 변경 없습니다. (11/10/9/8/7초)
마나 소모량: 80/90/100/110/120 60/65/70/75/80
사거리: 950 850
기본 피해량: 85/135/185/245/285 80/120/160/200/240
주문력 계수: 0.9 0.6
삭제공격 속도 감소: 3초간 공격 속도 -20/25/30/35/40%
신규보조 효과: 술통이 목표 지점에 도달한 후 폭발시킬 때까지 최대 2초간 50%까지 피해량과 둔화 효과가 증가합니다.

W - 취중 분노

재사용 대기시간: 전 레벨 공통 25초 8/7.5/7/6.5/6초
마나 소모: 변경 없습니다. (소모값 없음)
신규피해량: 그라가스의 다음 기본 공격이 20/50/80/110/140 (+0.3 주문력)에 대상의 잃은 체력 8/9/10/11/12%를 더한 만큼의 추가 마법 피해를 입힙니다.
지속 시간: 20초 3초
입는 피해 감소: 변경 없습니다. (10/12/14/16/18%)
신규보조 효과: 그라가스는 이제 술을 마시면서 통상의 80% 속도로 이동할 수 있습니다.
삭제공격력 증가: 공격력 +30/40/50/60/70
삭제마나 회복: 30/40/50/60/70 마나를 회복합니다.

E - 몸통 박치기

재사용 대기시간 전 레벨 공통 12초 16/15/14/13/12초
마나 소모: 75 50
기본 피해량: 80/120/160/200/240 80/130/180/230/280
주문력 계수: 0.5 0.6
삭제공격력 계수: 0.3/0.4/0.5/0.6/0.7
보조 효과: 유닛에 충돌하면 재사용 대기시간 50% 감소 유닛에 충돌하면 재사용 대기시간 3초 감소
군중 제어: 2.5초간 35% 둔화 적을 약간 밀어내고 1초간 기절시킵니다.

R - 술통 폭발

재사용 대기시간: 변경 없습니다. (100/90/80초)
마나 소모: 변경 없습니다. (100)
기본 피해량: 200/325/450 200/300/400
주문력 계수: 0.9 0.7
보조: 변경 없습니다. (적중 당한 적을 모두 밀어내고 범위 내의 시야를 밝힙니다.)

렝가

렝가의 팀 전투 능력을 향상시키기 위해 몇 가지 상향이 이루어집니다. 전투의 포효는 더 많은 적 챔피언(또는 대형 몬스터)에게 적중할수록 효율이 한정 없이 높아집니다. 올가미 이제 투척은 사거리가 크게 늘어나고 지정한 직선 궤적으로 발사되며, 강화 시의 속박 시간과 피해량이 증가합니다. 사냥의 전율은 이제 적을 추적할 때만 이동 속도를 높여주지만, 은신을 해제하면 이동 속도가 폭발적으로 빨라집니다. 그러나 렝가가 도약하면 대상을 덮칠 수 있는 거리까지 다가가면 대상에게 경고 메시지가 표시됩니다. (모습이 드러나는 것은 아닙니다.) 또, 야성으로 강화된 스킬은 이제 스킬 레벨이 아니라 챔피언 레벨에 따라 위력을 발휘하므로 세 가지 스킬을 항상 동등하게 활용할 수 있습니다. 뼈이빨 목걸이는 시야 기능을 탑재한 장신구로 변경되며, 중첩으로 공격력이 증가하진 않지만 사망해도 중첩이 사라지지 않고 렝가가 킬과 어시스트를 올림에 따라 다양한 보조 효과를 누릴 수 있죠.

이번 렝가 변경으로 전체적으로 더 깊이있는 게임플레이를 즐기며 약한 적들을 도륙하는 사냥꾼으로서 팀 전투에 기여하실 수 있을 것입니다. 예전 렝가의 문제는 둘 중 한가지 방식으로밖에 플레이할 수 없다는 것이었죠. 이득을 쌓으면 저항하지 못하는 약한 적들을 무차별적으로 쓰러뜨리며 전장을 휘어잡고, 뒤쳐지면 혼자서 적의 구조물을 공격하다 은신 기능으로 탈출하는 것이 전부였습니다. 단신으로 포탑과 억제기를 압박하는 전략이 그 자체로 게임의 재미를 해치지는 않지만, 렝가는 거의 어떤 위험도 없이 이를 실행할 수 있는 게 문제였습니다. 특히 포탑을 철거하는 속도가 너무 빨라서 지나치게 위협적이었죠. 간단히 정리하면 렝가 플레이에 있어 플레이어의 실력이 중요한 부분은 그대로 유지되고, 상호작용 없이 일방적으로 활용되는 능력은 하향됩니다. 뼈이빨 목걸이는 압도적인 승리를 노리고 사용하는 위험 부담이 큰 아이템이 아니라 렝가의 성장에서 중요한 역할을 차지하는 장신구 아이템으로 변경되었죠. 오늘 밤, 사냥에 나서세요!

일반

레벨 당 체력: 85 90
야성 효과: 스킬 레벨에 따라 증가 챔피언 레벨에 따라 증가

기본 지속 효과 - 보이지 않는 포식자

은신 효과: 도약 도중에 모습이 드러납니다. 도약 시작점부터 모습이 드러납니다.

Q - 포악함

버그 수정: 포악함 추가 피해량에 치명타가 적용되던 버그를 수정했습니다.
재사용 대기시간: 8/7.5/7/6.5/6초 6/5.5/5/4.5/4초
피해량: 30/60/90/120/150 (전 레벨 공통 +1.0 공격력) 20/40/60/80/100 (+1.0/1.05/1.10/1.15/1.20 공격력)
삭제공격 속도 증가: 4초간 +30/35/40/45/50% 공격 속도
기본 공격 강화 유효 시간: 2초 3초
삭제보조 효과: 구조물에 사용 가능

Q - 강화된 포악함

피해량: 스킬 레벨에 따라 30/60/90/120/150 (+2.0 공격력) 챔피언 레벨에 따라 20~235 (+1.5 공격력)
공격 속도 상승: 스킬 레벨에 따라 +60/70/80/90/100% 챔피언 레벨에 따라 +50-101%
공격 속도 상승 시간: 변경 없습니다. (5초)
중요피해량 증가: 5초간 (+10% 공격력)

W - 전투의 포효

재사용 대기시간: 15/14/13/12/11초 전 레벨 공통 12초
피해량: 변경 없습니다. (50/80/110/140/170 (+0.8 주문력))
방어력 및 마법 저항력 증가: 방어력 및 마법 저항력 +15/22/29/36/43 방어력 및 마법 저항력 +10/15/20/25/30
방어력 및 마법 저항력 증가 시간: 3초 4초
중요보조 효과: 적중한 적 챔피언 또는 대형 몬스터 하나당 방어력 및 마법 저항력 상승량이 50% 증가합니다. 상한은 없습니다.

W - 강화된 전투의 포효

피해량: 스킬 레벨에 따라 50/80/110/140/170 (+0.8 주문력) 챔피언 레벨에 따라 40~240 (+0.8 주문력)
최소 치유량: 20 + (10 x 레벨) 12 + (4 x 레벨)
최대 치유량: 40 + (20 x 레벨) 75 + (25 x 레벨)

E - 올가미 투척

신규보조 효과: 대상 지정형 스킬 대상 지정 없이 지정한 궤적으로 발사
재사용 대기시간: 12/11/10/9/8초 전 레벨 공통 10초
피해량: 60/105/150/195/240 (+0.7 공격력) 50/100/150/200/250 (+0.7 공격력)
사거리: 575 1000
둔화 효과: 이동 속도 -50/55/60/65/70% 이동 속도 -60/65/70/75/80%
둔화 지속 시간: 변경 없습니다. (2.5초)

E - 강화된 올가미 투척

피해량 스킬 레벨에 따라 60/105/150/195/240 (+0.7 공격력) 챔피언 레벨에 따라 50~340 (+0.7 공격력)
속박 지속 시간 1초 1.75초

R - 사냥의 전율

재사용 대기시간: 140/105/70초 120/95/70초
신규보조 효과: 적 챔피언을 향해 움직일 때에만 이동 속도가 증가합니다.
이동 속도 상승: 이동 속도 +20/25/30% 이동 속도 +15%
신규보조 효과: 은신 효과가 해제되면 렝가의 이동 속도가 5초 동안 +25/35/45% 증가합니다.
신규보조 효과: 은신이 해제된 후 5초 동안 렝가가 매초 1의 야성을 얻습니다.
신규보조 효과: 렝가가 은신 상태에서 거리 1000 내로 다가와 있을 경우 적들에게 경고 표시가 나타납니다. 단, 렝가의 모습이 보이지는 않습니다.

뼈이빨 목걸이

아이템 종류: 일반 아이템 장신구 (와드 토템, 수정 구슬, 탐지용 렌즈에 대응하는 세 가지 버전으로 준비됩니다.)
가격: 800 골드 무료
전리품 획득: 변경 없습니다. (킬 또는 어시스트당 +1)
삭제사망 시 페널티: 사망할 때 전리품 중첩 -1
삭제추가 공격력: 공격력 +5 (추가로 레벨당 +2)
전리품 3개 효과: 방어구 관통력 +10, 재사용 대기시간 감소 +5% 전투에서 벗어났거나 수풀 속에 있을 때 이동 속도 +25
전리품 6개 효과: 이동 속도 +25 보이지 않는 포식자 도약 거리 +125, 2단계 장신구 기능 사용 가능
삭제전리품 9개 효과: 보이지 않는 포식자 도약 거리 +150
신규전리품 12개 효과: 사냥의 전율 지속 시간 +5
삭제전리품 14개 효과: 사냥의 전율 지속 시간 +3, 사냥의 전율 시전 후 처음 사용하는 스킬로 야성 1 증가
신규전리품 20개 효과: 사냥의 전율 이동 속도 증가율이 +30%로 두 배 증가, 3단계 시야 장신구 기능 사용 가능 (와드 토템 버전 뼈이빨 목걸이에는 상급 투명 토템 사용 효과 적용)

맨 위로 돌아가기

챔피언

전 챔피언 능력치 변경

방어력 인장은 그야말로 누구나 장착하는 필수 룬이 되었죠. 방어력 인장 사용을 무조건 전제로 깔고 나머지 룬을 선택할 정도입니다. 이제 방어력을 상향해 방어력 인장에 덜 의존할 수 있도록 했습니다.
기본 방어력: 모든 챔피언의 기본 방어력이 4 증가합니다.

그레이브즈

빨리 뽑기의 마나 소모가 줄어들고, 무고한 희생자 스킬의 폭발 피해량이 최초 적중 시 피해량의 80%로 상향됩니다.

무고한 희생자 스킬로 무고한 희생자가 더 큰 피해를 입게 되겠죠.

E - 빨리 뽑기

마나 소모: 50 40

R - 무고한 희생자

최초 적중 시 피해량에 적용되는 추가 공격력 계수: 1.4 1.5
폭발 피해: 140/250/360 (+1.2 추가 공격력) 200/280/360 (+1.2 추가 공격력)

레넥톤

강신 스킬의 추가 체력과 범위 마법 피해가 저레벨 구간에서 하향, 고레벨 구간에서 상향됩니다.

레넥톤이 현재 공격로에서 무시무시한 위력을 떨치고 있어 예의 주시하고 있습니다. 장기적으로 조심스러운 조정이 이루어질 예정입니다. 6레벨만 되면 거의 무조건 공격로 상대를 찍어누를 수 있는 위력을 보여준 강신 스킬이 가장 먼저 변경됩니다. 다만, 초반에 이득을 챙긴다면 후반에 더욱 강력하게 성장할 여지는 남아 있습니다.

R - 강신

추가 체력: 300/450/600 200/400/800
한 번에 입히는 마법 피해: 40/70/100 30/60/120

레오나

공격로에서 레오나를 상대할 때는 원거리 견제로 체력을 깎아 함부로 덤벼들지 못하게 하는 게 정석입니다. 하지만 기본적으로 방어 관련 능력치와 체력 재생율이 높아 이런 방법이 통하지 않는 경우가 많았죠. 일식 스킬의 추가 방어력 및 마법 저항력이 하향되어 이제 레오나는 조금 더 때리는 보람이 있는 적이 될 것입니다. 또한, 레오나가 상대에게 덤벼들어 킬을 올리지 못하면 그때 입은 상처가 좀 더 오래 가겠죠.

일반

5초당 체력 재생: 9 7

W - 일식

추가 방어력 및 마법 저항력: 25/35/45/55/65 20/30/40/50/60

룰루

도와줘, 픽스! 스킬을 적에게 사용했을 때의 지속 시간이 줄어들었습니다. (아군에게 사용할 경우의 지속 시간은 그대로입니다.) 아군 미니언에게 시전하면 기존대로 픽스가 미니언을 따라다니지만, 보호막이 생성되지는 않습니다. 고레벨 구간에서의 기본 피해량 또한 하향되었습니다.

2014 시즌 개막과 함께 서포터 챔피언들이 변경되어 주문력 아이템을 구입해도 활약할 수 있게 되었죠. 대부분의 서포터 챔피언이 보조 효과가 강화되었고 공격력도 약간 상향되었는데, 룰루의 경우엔 양쪽 모두가 지나치게 강해졌습니다. 룰루가 중단 공격로를 담당하는 것은 게임의 재미에 긍정적인 현상이지만, 도와줘, 픽스! 스킬로 즉각 피해를 입힌 후 강력한 반짝반짝 창 두 갈래가 적을 꿰뚫는 견제는 공격로 상대방이 속수무책으로 당할 수밖에 없는 공격 패턴입니다. 룰루가 공격로에서 다른 팀원을 서포트하는 대신 단독으로 마법사 역할을 맡는 경우엔 전략적인 장단점이 생겨야 하는데, 그런 고려 없이 아군 팀 구성이나 적 챔피언이 누구든지 관계 없이 선택될 만큼 강력했습니다. 그래서 룰루의 무시무시한 공격력이 좀 하향되어야 했는데요, 서포터 룰루가 지나치게 약해지지 않도록 배려했습니다. 서포터로 나서면 골드 획득량이 줄어드는 약점도 있으니까요. 앞으로도 이번 변경의 결과를 면밀히 살펴서, 서포터 룰루가 지나치게 약해질 경우 필요한 변경이 이루어질 예정입니다.

E - 도와줘, 픽스!

적에게 시전 시 지속 시간: 6초 4초
삭제미니언에게 시전 시: 미니언에게 보호막이 적용됩니다.
기본 피해량: 80/130/180/230/280 80/110/140/170/200

리 신

리 신 자신이나 아군 챔피언에게 시전하면 방호 스킬의 재사용 대기시간이 절반으로 줄어듭니다. 대신, 기본 재사용 대기시간이 늘어나며 챔피언이 아닌 유닛에게 사용했을 경우엔 리 신 자신에게 보호막이 생기지 않습니다.

리 신은 원래 게임 초반에 강력한 대신 위험 부담이 큰 챔피언이긴 하지만, 기동력이 뛰어나고 기본 능력치가 높아 위험을 무릅쓰지 않고도 플레이할 수 있었습니다. 게임 후반을 강화하고 초반의 위험 부담을 함께 높이는 방안이 고려되었으나, 리 신의 핵심적인 플레이 패턴을 유지하기 위해 지나치게 급격한 변경은 피하게 되었습니다. 이번 변경으로 기동력을 이용한 플레이를 펼칠 때 위험 부담이 커졌으나, 전반적인 게임 운영 흐름은 그대로 유지됩니다. 이제부터 리 신은 와드만 갖고 놀지 말고 팀원들과 좀더 소통할 필요가 있겠죠.

W - 방호

재사용 대기시간: 9초 14초
신규보조 효과: 리 신 자신에게 혹은 아군 챔피언에게 시전하면 재사용 대기시간이 50% 줄어듭니다.
보호막 지속 시간: 5초 4초
삭제보조 효과: 챔피언이 아닌 유닛에게 방호를 시전한 경우에도 리 신에게 보호막이 적용됩니다.

W - 강철의 의지

지속 시간: 5초 4초

미스 포츈

이제 미스 포츈이 게임 중후반에 활약할 수 있게 됩니다. 불순물 탄환과 쌍권총 난사로 뛰어난 공격력을 발휘하고, 초반에 공격로에서 이득을 챙기면 더 강력하게 성장할 수 있죠. 그 대신 초반 공격로 견제 능력이 조금 하향됩니다. 한 발에 두 놈 스킬 피해량이 줄어들고, 불순물 탄환의 초반 피해량도 감소합니다.

예전에 미스 포츈은 게임 초반에 강력한 존재감을 뽐내고, 후반에는 무시무시한 범위 피해를 입힐 수 있는 최고의 원거리 딜러였습니다. 그러나 정의의 전장이 변화하면서 어느덧 양쪽 모두 어정쩡하게 모자란 챔피언이 되어버렸고 한동한 잊혀져 있었죠. 이제, 미스 포츈이 다시 활약할 때가 왔습니다. 게임 초반 견제 능력이 약간 하향됐지만, 쌍권총 난사와 불순물 탄환으로 적에게 충격과 공포를 선사할 수 있을 것입니다.

기본 지속 효과 - 활보

신규보조 효과: 이로운 효과 아이콘에 추가 이동 속도가 표시됩니다.

Q - 한 발에 두 놈

재사용 대기시간: 9/8/7/6/5초 7/6/5/4/3초
마나 소모: 70/75/80/85/90 43/46/49/52/55
첫 번째 대상 적중 시 기본 피해량: 25/60/95/130/165 20/35/50/65/80
첫 번째 대상 적중 시 공격력 계수: 0.75 0.85
두 번째 대상 적중 시 기본 피해량: 30/72/114/156/198 40/70/100/130/160
두 번째 대상 적중 시 공격력 계수: 0.9 1.0

W - 불순물 탄환

마나 소모: 전 레벨 공통 50 30/35/40/45/50
중첩 당 추가 피해량: 4/6/8/10/12 (+0.05 주문력) 0.06 공격력
공격 속도 증가 효과: 공격 속도 +30/35/40/45/50% 공격 속도 +20/30/40/50/60%
고통스러운 상처 지속 시간: 3초 2초

E - 총알은 비를 타고

재사용 대기시간: 전 레벨 공통 15초 14/13/12/11/10초
이동 속도 둔화: 20/28/36/44/52% 25/35/45/55/65%
시야 확보: 이제 실제 피해 범위에 더욱 가깝게 적용됩니다.

R - 쌍권총 난사

신규보조 효과: 지속 효과로 불순물 탄환 효과의 최대 중첩 수를 6/7/8개로 늘립니다.
기본 피해량: 탄환 당 65/95/125 탄환 당 50/75/125
총 기본 피해량: 520/760/1000 400/600/1000
삭제추가 공격력 계수: 0.35
신규보조 효과: 각 탄환이 적중한 대상에게 불순물 탄환 중첩을 쌓고, 중첩 피해를 적용합니다. (고통스러운 상처 효과는 적용되지 않습니다.)

애니비아

얼음 폭풍을 더 정교하게 활용할 수 있도록 약간 상향했습니다.

R - 얼음 폭풍

보조 효과: 취소하는 순간 한 번 더 피해를 줍니다.

오공

파쇄격 스킬의 방어력 감소 효과가 이제 스킬 레벨에 따라 성장합니다. 최고 레벨에 도달해야 이전과 같은 수치가 적용되죠. 회전격의 공격력 계수도 하향됩니다.

게임 통계를 보면, 오공은 상단 및 중단 공격로와 정글에서 플레이할 수 있는 다재다능함에도 불구하고 출시 이래 지금까지 상당한 승률을 유지해 왔습니다. 이제 오공의 기본적인 약점을 무마할 수 있는 방법이 많이 발견되었기 때문에, 그 강력한 공격력에 조정에 필요합니다. 특히 공격력 아이템을 잔뜩 구입한 후 정글에서 뛰쳐나오는 오공은 정말 무서웠죠. 게임 초반의 지나치게 강력한 공격력을 조정하기 위해 여러 방법이 고려되었지만, 실효성이 있는 다른 방법이 없었습니다. 예를 들어 방어력 감소 효과를 중립 몬스터에게 적용되지 않게 하는 방법도 논의되었지만, 몬스터들은 어차피 초반에 방어력이 높지 않아 별 효과가 없었습니다.

Q - 파쇄격

방어력 감소 효과: 전 레벨 공통 30% 10/15/20/25/30%

R - 회전격

공격력 계수: 초당 1.2 (총 4.8) 초당 1.1 (총 4.4)

직스

직스의 공격 사거리가 줄어듭니다.

직스는 스킬과 기본 공격으로 적을 끊임없이 견제하면서도 공격로 대치 단계를 정말 안전하게 넘길 수 있었죠. 이제 적을 견제하러 들어갈 때의 위험 부담이 조금 커질 것입니다.

일반

기본 공격 사거리: 575 550

카직스

공허의 습격을 연속 시전하는 사이사이에 은신이 해제되는 시간을 늘렸습니다. 또, 카직스가 은신하고 있을 때는 활성 보호색 진화로 포탑에게 입는 피해량이 줄어들지 않습니다.

활성 보호색 진화가 변경된 후 많은 이 스킬을 훌륭하게 응용하는 카직스 플레이어가 많아졌죠. 그러나 공허의 습격 지속 시간이 늘어나 카직스가 은신에서 벗어나 있는 시간이 지나치게 짧아졌고, 이는 카직스가 기동력을 활용해 종횡무진 전장을 누비는 게 아니라 적의 스킬 공격을 정면에서 태연하게 받아낼 수 있다는 걸 의미했습니다. 이번 변경으로 카직스가 사냥에 나설 때 상대하는 플레이어들이 대응할 여지가 좀 더 넓어질 것입니다.

R - 공허의 습격

버그 수정: 점멸을 시전해도 공허의 습격 은신 효과가 사라지지 않습니다.
신규연속 시전 시 재사용 대기시간: 1초

R - 활성 보호색 진화

삭제피해량 감소: 포탑 공격으로 입는 피해를 감소시킵니다.

트위스티드 페이트

지난 시즌 3.10 패치에서 변경된 사항을 절반쯤 되돌려, 미리 카드를 뽑은 후 적을 기습하기가 좀 더 쉬워질 것입니다.

W - 카드 뽑기

카드 선택 시간: 8초 6초
카드 사용 시간: 4초 6초

피들스틱

피들스틱이 수풀에 숨어 있어도 두려움 지속 효과가 근처 챔피언에게 영향을 미치는 것 알고 계셨나요? 영리한 플레이어는 이 점을 활용해 효과 아이콘이 나타나면 피들스틱이 도사리고 있다는 걸 눈치챌 수 있었습니다. 이번 변경으로 피들스틱이 더 효과적으로 매복 전술을 활용할 수 있겠죠.

기본 지속 효과 - 두려움

보조 효과: 이제 피들스틱을 보지 못하는 적 챔피언에겐 적용되지 않습니다.

하이머딩거

최첨단 포탑이 광선을 충전한 상태로 설치되지 않으므로 이제 일렬로 선 적들에게 순간적으로 강력한 피해를 입히는 용도로 활용하긴 어렵게 됐습니다. H-28G 진화형 포탑과 최첨단 포탑의 피해량도 하향됩니다.

게임 초반에 하이머딩거의 공격력이 지나치게 강력했기 때문에 약간 하향됩니다. 대신 게임 후반에 성장할 여지는 그대로입니다. 업그레이드!!! 최첨단 터렛은 지속적으로 최대한의 피해를 입히는 스킬이므로, 즉시 피해를 입히는 업그레이드!!! 로켓 연사와 명확히 구별될 수 있도록 변경되죠.

Q - H-28G 진화형 포탑

포탑 기본 공격 피해량: 15/22/29/36/42 (+0.125 주문력) 12/18/23/29/34 (+0.150 주문력)
광선 공격 피해량: 50/75/100/125/150 (+0.5 주문력) 40/60/80/105/130 (+0.55 주문력)
광선 공격 재사용 대기시간: 12초 16초

Q - H-28Q 최첨단 포탑

포탑 기본 공격 피해량: 90/110/130 (+0.33 주문력) 70/90/110 (+0.3 주문력)
광선 공격 피해량: 225/300/375 (+0.8 주문력) 180/240/300 (+0.7 주문력)
기본 공격 시 광선 공격 충전: 2/4/6/8/10% 전 레벨 공통 20%
삭제보조 효과: 포탑 설치 시 광선 공격이 충전된 상태로 생성됩니다.

맨 위로 돌아가기

약간의 변경 및 버그 수정

나미


일반

추천 아이템: 추천 아이템이 업데이트 되었습니다.

말자하

공격 대상 선택 시스템을 좀 더 직관적으로 변경하여, 가끔 공허충이 목표를 정하지 못하고 우왕좌왕하던 현상이 사라집니다.


기본 지속 효과 - 공허충 소환

중요: 공허충 공격 대상 선택 시 우선 순위
  • 황천의 손아귀가 시전된 대상을 공격합니다.
  • 재앙의 환상에 걸린 가장 가까운 챔피언을 공격합니다.
  • 재앙의 환상에 걸린 가장 가까운 챔피언 외의 유닛을 공격합니다.
  • 가장 가까운 적을 공격합니다.
  • 이제 공허충이 공격 우선 순위 충돌을 일으켜 대상 사이를 왔다갔다하면서 혼란에 빠지지 않게 됩니다.

블리츠크랭크


Q - 로켓 손

버그 수정: 로켓 손을 시전하는 동안 블리츠크랭크가 쓰레쉬의 랜턴을 탈 수 없었던 버그를 수정했습니다.

아리


Q - 현혹의 구슬

버그 수정: 아리가 사망했거나 움직일 수 없는 상황일 경우 현혹의 구슬이 돌아오지 않던 버그를 수정했습니다.

자르반 4세

자르반 4세가 대격변 스킬을 약간 더 안정적으로 적중시킬 수 있게 되었습니다.

R - 대격변

보조 효과: 이제 벽이 생성될 때 자르반 4세와 대상 사이를 중심점으로 삼습니다.

잔나


스킨 효과

음성: 기상캐스터 잔나의 귀환 시 음성이 한 가지로만 출력되던 버그가 수정되었습니다.

징크스


R - 초강력 초토화 로켓!

중요버그 수정: 이제 징크스가 로켓을 발사하기 시작할 때가 아니라 발사를 마친 후부터 재사용 대기시간이 시작됩니다.
중요버그 수정: 초강력 초토화 로켓 시전 도중에 징크스가 사망할 경우 재사용 대기시간이 시작되지 않습니다.

탈론


R - 그림자 공격

신규보조 효과: 이제 점멸을 시전해도 그림자 공격의 은신 효과가 사라지지 않습니다.
버그 수정: 이제 녹서스식 외교 스킬을 시전해도 그림자 공격의 은신 효과가 사라지지 않습니다. (적을 공격하면 정상적으로 은신 효과가 사라집니다.)

판테온


기본 지속 효과 - 방패 방어술

버그 수정: 공성 미니언이나 대형 몬스터의 공격이 피해량 40을 넘지 않는 경우에 해당 공격을 방어하지 않던 버그를 수정했습니다.

맨 위로 돌아가기

아이템

수정 구슬 (파랑 장신구)

수정 구슬이 쓸모없는 아이템 취급을 받지 않으려면 어떻게 해야 할까요? 색을 바꿔야 하나요...

수정 구슬 (1레벨)

시야 지속 시간: 1초 2초
사거리: 1500 2500

수정 구슬 (9레벨)

시야 지속 시간: 1초 2초
사거리: 2500 3500

망원 구슬

시야 지속 시간: 1초 2초
사거리: 3000 4000

도마뱀 장로의 영혼

도마뱀 장로의 영혼 때문에 게임 초반에 강력한 공격력을 발휘하는 정글 사냥꾼들이 지나치게 유리해지는 경향이 좀 있습니다. 해당 아이템을 계속해서 면밀히 주시할 예정이지만, 변경에 있어서는 신중하게 접근하겠습니다.
몬스터에게 입히는 피해 증가율: 30% 20%

신규야생의 섬광

드디어 나왔습니다! 지난 4.4 패치에서 리글의 랜턴을 변경할 때 예고해 드렸던 아이템이 추가되어, 정글 사냥꾼 아이템 라인업이 완성되었습니다. 야생의 섬광은 게임 초중반의 위력을 다소 희생하더라도 게임 후반을 위해 사냥에 집중하는 챔피언들에게 특화된 아이템입니다.
업그레이드: 대형 몬스터를 25마리 사냥하면 리글의 랜턴이 야생의 섬광으로 업그레이드됩니다.
공격력: +15
공격 속도: +35%
고유 지속 효과 무력화: 기본 공격 적중 시 100의 추가 피해(챔피언 상대로는 67%감소)를 입히고 체력을 10 회복합니다. 킬 또는 어시스트를 올리거나 대형 몬스터를 처치할 때마다 피해량이 3, 회복량이 1씩 늘어납니다.
고유 지속 효과: 몬스터 처치로 획득하는 골드 +30%
고유 사용 효과: 180초간 주위 시야를 밝혀주는 투명 와드를 설치합니다. (재사용 대기시간 180초)
보조 효과: 와드 설치 범위가 일반 와드에 비해 훨씬 넓어집니다.

서포터 아이템 및 재료 아이템 변경

서포터를 위한 새로운 기본 아이템을 두 가지 소개합니다. 주문력과 이동 속도를 높여주는 에테르 환영, 마나 회복과 재사용 대기시간 감소를 위한 금지된 우상이죠. 새 아이템 도입과 함께 기존 아이템 몇몇의 재료 아이템도 조정되었습니다.

시즌 중반을 맞아, 서포터 및 서포터 아이템에 대한 2014 시즌 변경점이 한층 더 보완됩니다. 2014 시즌 들어 서포터가 골드를 좀 더 많이 획득할 수 있게 되었으나, 시간대별로 골드 획득 흐름에 맞추어 아이템을 조합하고 구성할 경로는 충분히 다양하지 않았죠. 이번 신규 아이템을 토대로 앞으로 서포터 플레이어들이 아이템 선택에 있어 더 다양하고 흥미로운 전략을 선택할 수 있도록 계속해서 개선해 나가겠습니다.

신규에테르 환영

재료 아이템: 증폭의 고서 + 515 골드
총 가격: 950 골드
주문력: +30
고유 지속 효과: 이동 속도 +5%

리치베인

재료 아이템: 광휘의 검 + 방출의 마법봉 + 940 골드 광휘의 검 + 에테르 환영 + 850 골드
총 가격: 변경 없습니다. (3000 골드)

쌍둥이 그림자

재료 아이템: 증폭의 고서 + 증폭의 고서 + 마법무효화의 망토 + 730 골드 에테르 환영 + 악마의 마법서 + 780 골드
총 가격: 2000 골드 2400 골드
삭제수정의 상처 & 뒤틀린 숲 재료 아이템: 증폭의 고서 + 증폭의 고서 + 마법무효화의 망토 + 530 골드 = 1800 골드
주문력: +50 +80
신규재사용 대기시간 감소: +10%
삭제마법 저항력 +40
사용 효과 재사용 대기시간 (소환사의 협곡 & 칼바람 나락): 120초
사용 효과 재사용 대기시간 (수정의 상처 & 뒤틀린 숲): 60초
신규보조 효과: 이제 망령이 대상을 발견하지 못하면, 시전자에게 돌아오려 합니다. 망령 한 마리가 시전자에게 돌아오는 데 성공하면 사용 효과의 재사용 대기시간이 40초 감소합니다. (수정의 상처 및 뒤틀린 숲에서는 20초 감소)

신규금지된 우상

재료 아이템: 요정의 부적 + 요정의 부적 + 390 골드
총 가격: 750 골드
5초당 마나 재생: 8
고유 지속 효과: 재사용 대기시간 감소 +10%

모렐로노미콘

재료 아이템: 증폭의 고서 + 요정의 부적 + 악마의 마법서 + 765 골드 악마의 마법서 + 금지된 우상 + 630 골드
총 가격: 변경 없습니다. (2200 골드)

승천의 부적

재료 아이템: 유목민의 메달 + 요정의 부적 + 955 골드 유목민의 메달 + 금지된 우상 + 585 골드
총 가격: 2000 골드 2200 골드
5초당 마나 재생: +10 +15

서리 여왕의 지배

조합 비용: 315 골드 515 골드
총 가격: 2000 골드 2200 골드
주문력: +40 +50

산악 방벽

조합 비용: 185 골드 385 골드
총 가격: 2000 골드 2200 골드
5초당 체력 재생: +25 +20
체력: +375 +500

고대인의 의지

재료 아이템: 마법공학 리볼버 + 요정의 부적 + 요정의 부적 + 440 골드 마법공학 리볼버 + 악마의 마법서 + 480 골드
총 가격: 2000 골드 2500 골드
주문력: +50 +80
삭제5초당 마나 재생 +10

군단의 방패

재료 아이템: 원기 회복의 구슬 + 천 갑옷 + 루비 수정 + 마법무효화의 망토 + 670 골드 원기 회복의 구슬 + 루비 수정 + 음전자 망토 + 600 골드
총 가격: 1950 골드 1900 골드
신규마법 저항력: +20 마법 저항력
삭제 방어력 +20

강철의 솔라리 펜던트

재료 아이템: 군단의 방패 + 600 골드 점화석 + 군단의 방패 + 50 골드
총 가격: 2550 골드 2800 골드
체력: +300 +400
신규마법 저항력: +20 마법 저항력
삭제 방어력 +20

파수꾼의 갑옷

재료 아이템: 천 갑옷 + 천 갑옷 + 400 골드 쇠사슬 조끼 + 280 골드
총 가격: 변경 없습니다. (1000 골드)

빙하의 장막

재료 아이템: 사파이어 수정 + 쇠사슬 조끼 + 230 골드 천 갑옷 + 사파이어 수정 + 250 골드
총 가격: 1350 골드 950 골드
방어력: +45 +20
마나: +300 +250

냉기의 화신

조합 비용: 700 골드 750 골드
총 가격: 3250 골드 2900 골드
방어력: +70 +60

얼어붙은 심장

조합 비용: 550 골드 650 골드
총 가격: 2900 2600
방어력: +95 +100
공격 속도 감소 오오라: -20% 공격 속도 -15% 공격 속도

장화 마법 부여

수비용 아이템인 민병대 장화가 너무 압도적인 효율을 뽐냈기 때문에, 공격적으로 활용되는 마법 부여 장화들을 강화시켜 밸런스를 맞추고자 했습니다. 장화 마법 부여는 취향입니다. 더 넓어진 선택의 폭을 누리세요!

마법 부여: 민첩성

이동 속도: 이동 속도 +15 이동 속도 +20

마법 부여: 대장

가격: 750 골드 600 골드
접근하는 아군 유닛의 이동 속도: 이동 속도 +8% 이동 속도 +10%

마법 부여: 왜곡

소환사 주문 재사용 대기시간 감소: 25% 20%
신규보조 효과: 유체화 주문의 이동 속도 증가율이 28%에서 40%로 상승합니다.
신규보조 효과: 점멸 주문을 시전한 후 1초간 이동 속도가 30% 상승합니다.
신규보조 효과: 순간이동 주문을 성공적으로 시전한 후 3초간 이동 속도가 30% 상승합니다.

마법 부여: 격노

가격: 650 골드 475 골드

마법 부여: 민병대

우물에서의 회복: 즉각 완전 회복 초당 잃은 체력과 마나의 일정 비율을 회복
활성화 조건: 8초간 전투에서 벗어나 있으면 활성화 6초간 전투에서 벗어나 있으면 활성화

맨 위로 돌아가기

2014 시즌 개막과 함께 룬 밸런스 변경이 있을 것이라는 말씀을 드린 바 있죠. 그러나 지금까지 면밀한 검토를 거친 끝에 단순한 조정보다는 시스템 자체를 좀더 근본적으로 개편해야 한다는 결론을 내렸습니다. 그럼에도 불구하고 일단 2014 시즌에 맞는 밸런스 조정은 필요하기 때문에 시즌 중반을 맞이하여 아래와 같이 변경이 이뤄집니다. 룬 시스템의 문제점에 대한 플레이어 여러분의 의견은 귀기울여 듣고 있으며, 앞으로 진지하게 고려하여 개선해 나가도록 하겠습니다. 이번 변경은 모든 문제를 해결하는 것은 아니지만, 이제 룬 선택에 있어 어느 정도 선택의 자유를 누리실 수 있을 것입니다. 두 가지 룬이 하향되는 대신 다른 부분에서 이를 보완하기 위한 상향이 이뤄졌고요.

이번 변경에서 특별히 하향된 룬은 방어력 인장과 생명력 흡수 정수입니다. 해당 룬의 효과를 누릴 수 있는 챔피언이라면 누구나 사용하는, 두말할 것 없이 '최고의 선택'이었죠. 어느 정도 한정된 챔피언들이 사용하는 생명력 흡수 정수와는 달리, 방어력 룬은 특히 누구나 사용할 수밖에 없는 필수 룬이었습니다. 따라서 그 외의 룬들을 전반적으로 상향하여 밸런스를 크게 건드리지 않고 선택의 폭을 넓히고자 했습니다. 또 가격 대비 성능이 떨어지는 룬들도 가격에 걸맞는 효율을 낼 수 있도록 했습니다.

인장

3단계

상급 방어력 인장

인장 1개당: 방어력 +1.41 방어력 +1.00
인장 9개당: 방어력 +12.69 방어력 +9.00
추가 밸런스 조정: 모든 챔피언의 기본 방어력이 4씩 상향됩니다.

상급 성장 방어력 인장

인장 1개당: 18레벨 방어력 +2.7 18레벨 방어력 +3.0
인장 9개당: 18레벨 방어력 +24.3 18레벨 방어력 +27.00

상급 체력 인장

인장 1개당: 체력 +5.35 체력 +8.00
인장 9개당: 체력 +48.15 체력 +72

상급 성장 체력 인장

인장 1개당: 18레벨 체력 +19.44 18레벨 체력 +24.00
인장 9개당: 18레벨 체력 +174.96 18레벨 체력 +216.00

상급 체력 재생 인장

인장 1개당: 체력 회복/5초 +0.43 체력 회복/5초 +0.56
인장 9개당: 체력 회복/5초 +3.87 체력 회복/5초 +5
2단계

방어력 인장

인장 1개당: 방어력 +1.09 방어력 +0.78
인장 9개당: 방어력 +9.81 방어력 +7.02
추가 밸런스 조정: 모든 챔피언의 기본 방어력이 4씩 상향됩니다.

성장 방어력 인장

인장 1개당: 18레벨 방어력 +2.16 18레벨 방어력 +2.34
인장 9개당: 18레벨 방어력 +19.44 18레벨 방어력 +21.06

체력 인장

인장 1개당: 체력 +4.16 체력 +6.24
인장 9개당: 체력 +37.44 체력 +56.16

성장 체력 인장

인장 1개당: 18레벨 체력 +15.12 18레벨 체력 +18.72
인장 9개당: 18레벨 체력 +136.08 18레벨 체력 +168.48

체력 재생 인장

인장 1개당: 체력 회복/5초 +0.34 체력 회복/5초 +0.43
인장 9개당: 체력 회복/5초 +3.06 체력 회복/5초 +3.90
1단계

하급 방어력 인장

인장 1개당: 방어력 +0.78 방어력 +0.56
인장 9개당: 방어력 +7.02 방어력 +5.04
추가 밸런스 조정: 모든 챔피언의 기본 방어력이 4씩 상향됩니다.

하급 성장 방어력 인장

인장 1개당: 18레벨 방어력 +1.44 18레벨 방어력 +1.68
인장 9개당: 18레벨 방어력 +12.96 18레벨 방어력 +15.12

하급 체력 인장

인장 1개당: 체력 +2.97 체력 +4.48
인장 9개당: 체력 +26.73 체력 +40.32

하급 성장 체력 인장

인장 1개당: 18레벨 체력 +10.8 18레벨 체력 +13.44
인장 9개당: 18레벨 체력 +97.2 18레벨 체력 +120.96

하급 체력 재생 인장

인장 1개당: 체력 회복/5초 +0.24 체력 회복/5초 +0.31
인장 9개당: 체력 회복/5초 +2.16 체력 회복/5초 +2.80

문양

3단계

상급 성장 재사용 대기시간 감소 문양

문양 1개당: 18레벨 재사용 대기시간 감소 +1.11% 18레벨 재사용 대기시간 감소 +1.67%
문양 9개당: 18레벨 재사용 대기시간 감소 +9.99% 18레벨 재사용 대기시간 감소 +15%

상급 성장 마법 저항력 문양

문양 1개당: 18레벨 마법 저항력 +2.7 18레벨 마법 저항력 +3.00
문양 9개당: 18레벨 마법 저항력 +24.3 18레벨 마법 저항력 +27.00

상급 마나 재생 문양

문양 1개당: 마나 회복/5초 +0.31 마나 회복/5초 +0.33
문양 9개당: 마나 회복/5초 +2.79 마나 회복/5초 +3

상급 성장 마나 재생 문양

문양 1개당: 18레벨 마나 회복/5초 +0.99 18레벨 마나 회복/5초 +1.20
문양 9개당: 18레벨 마나 회복/5초 +8.91 18레벨 마나 회복/5초 +10.80
2단계

성장 재사용 대기시간 감소 문양

문양 1개당: 18레벨 재사용 대기시간 감소 +0.9% 18레벨 재사용 대기시간 감소 +1.30%
문양 9개당: 18레벨 재사용 대기시간 감소 +8.1% 18레벨 재사용 대기시간 감소 +11.70%

성장 마법 저항력 문양

문양 1개당: 18레벨 마법 저항력 +2.16 18레벨 마법 저항력 +2.34
문양 9개당: 18레벨 마법 저항력 +19.44 18레벨 마법 저항력 +21.06

마나 재생 문양

문양 1개당: 마나 회복/5초 +0.24 마나 회복/5초 +0.26
문양 9개당: 마나 회복/5초 +2.16 마나 회복/5초 +2.34

성장 마나 재생 문양

문양 1개당: 18레벨 마나 회복/5초 +0.72 18레벨 마나 회복/5초 +0.94
문양 9개당: 18레벨 마나 회복/5초 +6.48 18레벨 마나 회복/5초 +8.42
1단계

하급 성장 재사용 대기시간 감소 문양

문양 1개당: 18레벨 재사용 대기시간 감소 +0.72% 18레벨 재사용 대기시간 감소 +0.93%
문양 9개당: 18레벨 재사용 대기시간 감소 +6.48% 18레벨 재사용 대기시간 감소 +8.40%

하급 성장 마법 저항력 문양

문양 1개당: 18레벨 마법 저항력 +1.44 18레벨 마법 저항력 +1.68
문양 9개당: 18레벨 마법 저항력 +12.96 18레벨 마법 저항력 +15.12

하급 마나 재생 문양

문양 1개당: 마나 회복/5초 +0.17 마나 회복/5초 +0.19
문양 9개당: 마나 회복/5초 +1.53 마나 회복/5초 +1.68

하급 성장 마나 재생 문양

문양 1개당: 18레벨 마나 회복/5초 +0.54 18레벨 마나 회복/5초 +0.67
문양 9개당: 18레벨 마나 회복/5초 +4.86 18레벨 마나 회복/5초 +6.05

정수

3단계

상급 재사용 대기시간 감소 정수

정수 1개당: 재사용 대기시간 감소 +1.67% 재사용 대기시간 감소 +2.50%
정수 3개당: 재사용 대기시간 감소 +5.01% 재사용 대기시간 감소 +7.50%

상급 성장 재사용 대기시간 감소 정수

정수 1개당: 18레벨 재사용 대기시간 감소 +2.5% 18레벨 재사용 대기시간 감소 +5.00%
정수 3개당: 18레벨 재사용 대기시간 감소 +7.5% 18레벨 재사용 대기시간 감소 +15.00%

상급 공격 속도 정수

정수 1개당: 공격 속도 +3.4% 공격 속도 +4.5%
정수 3개당: 공격 속도 +10.2% 공격 속도 +13.50%

상급 생명력 흡수 정수

정수 1개당: 생명력 흡수 +2% 생명력 흡수 +1.5%
정수 3개당: 생명력 흡수 +6% 생명력 흡수 +4.5%
추가 밸런스 조정: 공격 계열 특성 포식을 사용하면 미니언 처치 시 체력이 3 회복됩니다. (기존 2 회복)
2단계

재사용 대기시간 감소 정수

정수 1개당: 재사용 대기시간 감소 +1.33% 재사용 대기시간 감소 +1.95%
정수 3개당: 재사용 대기시간 감소 +3.99% 재사용 대기시간 감소 +5.85%

성장 재사용 대기시간 감소 정수

정수 1개당: 18레벨 재사용 대기시간 감소 +2% 18레벨 재사용 대기시간 감소 +3.9%
정수 3개당: 18레벨 재사용 대기시간 감소 +6% 18레벨 재사용 대기시간 감소 +11.7%

공격 속도 정수

정수 1개당: 공격 속도 +2.64% 공격 속도 +3.51%
정수 3개당: 공격 속도 +7.92% 공격 속도 +10.53%

생명력 흡수 정수

정수 1개당: 생명력 흡수 +1.56% 생명력 흡수 +1.17%
정수 3개당: 생명력 흡수 +4.68% 생명력 흡수 +3.51%
추가 밸런스 조정: 공격 계열 특성 포식을 사용하면 미니언 처치 시 체력이 3 회복됩니다. (기존 2 회복)
1단계

하급 재사용 대기시간 감소 정수

정수 1개당: 재사용 대기시간 감소 +0.93% 재사용 대기시간 감소 +1.40%
정수 3개당: 재사용 대기시간 감소 +2.79% 재사용 대기시간 감소 +4.20%

하급 성장 재사용 대기시간 감소 정수

정수 1개당: 18레벨 재사용 대기시간 감소 +1.44% 18레벨 재사용 대기시간 감소 +2.80%
정수 3개당: 18레벨 재사용 대기시간 감소 +4.32% 18레벨 재사용 대기시간 감소 +8.40%

하급 공격 속도 정수

정수 1개당: 공격 속도 +1.89% 공격 속도 +2.52%
정수 3개당: 공격 속도 +5.67% 공격 속도 +7.56%

하급 생명력 흡수의 정수

정수 1개당: 생명력 흡수 +1.12% 생명력 흡수 +0.84%
정수 3개당: 생명력 흡수 +3.36% 생명력 흡수 +2.52%
추가 밸런스 조정: 공격 계열 특성 포식을 사용하면 미니언 처치 시 체력이 3 회복됩니다. (기존 2 회복)

맨 위로 돌아가기

특성

포식

방어력 인장과 마찬가지로 생명력 흡수 정수는 몇몇 챔피언들의 경우 필수적으로 사용되는 룬이었습니다. 해당 룬이 하향됨에 따라, 특성 포식을 강화하여 밸런스를 맞추고자 했습니다.
처치 시 체력 회복: 2 3

주워 먹기

주워 먹기 특성의 적용 범위가 고대 주화의 범위보다 좁아서 두 가지 골드 획득 효과를 모두 누리지 못하는 경우가 있었죠. 이번에 수정됩니다.
범위: 900 1100

맨 위로 돌아가기

소환사 주문

탈진

공격로에서 킬을 노리는 챔피언에게 점화가 필수 주문이 되면서 탈진의 인기는 곤두박질쳤습니다. 또한, 최근 추세가 서포터 챔피언이 강력한 순간 공격력을 발휘하며 공격적으로 활약하는 쪽으로 기울어, 탈진을 성공적으로 활용하기가 더욱 어려워졌죠. 이번 상향으로 탈진을 수비적으로 활용하기가 더 유리해지며, 정확한 타이밍에 사용했을 경우의 효과도 더욱 강력해질 것으로 보입니다.
공격 속도 감소: 공격 속도 -50% 공격 속도 -30%
피해량 감소: 피해량 -30% 피해량 -50%
사거리: 550 650

회복

단숨에 치열하게 공격적으로 승부를 내는 것이 최근의 추세가 되어, 공격로에서 수세에 몰렸을 때 안정적으로 사용할 수 있는 소환사 주문이 필요해졌습니다. 이번 변경으로 회복 주문이 용도가 더 폭넓어지고, 팀을 위해 기회를 만들어내는 데에도 활용될 수 있을 것입니다.
재사용 대기시간: 300 240
치유량: 90~345 90~495
신규보조 효과: 범위 안의 모든 아군 치유 시전자와 시전자의 커서에 가장 근접한 아군 챔피언 치유 (커서에 근접한 대상이 없을 경우 가장 체력이 낮은 아군 유닛)
신규보조 효과: 대상이 된 챔피언에게 걸린 치유 감소 효과를 제거합니다.
신규보조 효과: 대상이 된 챔피언은 2초간 이동 속도가 +30% 상승합니다.

점화

상향된 회복 주문과 밸런스를 맞추기 위해 변경됩니다. 무엇보다, 불타고 있는 적은 아주 잘 보이는 게 정상이죠.
시야: 점화 주문이 걸려 있는 동안 대상의 위치를 보여줍니다. 단, 은신한 챔피언을 드러내진 않습니다.

방어막

소환사 여러분의 의견대로 다른 효과와 뚜렷하게 구분될 수 있도록 방어막 파티클 효과를 변경했습니다.
그래픽: 금색 노란빛을 띈 흰색으로 변경됩니다.

맨 위로 돌아가기

소환사의 협곡

드래곤

이제 드래곤이 대상의 현재 체력의 일정 비율만큼 피해를 입힙니다. 게다가 갈수록 그 비율이 증가하죠. 또한 공격에 당한 챔피언이 입히는 모든 피해를 20% 줄이는 해로운 효과를 부여합니다. 방어력과 마법 저항력도 시간에 따라 상승합니다.

드래곤이 가지는 전략적 가치에 비해, 챔피언 공격력이 성장하는 게임 중후반에는 너무 쉽게 사냥할 수 있었습니다. 이번 변경으로 드래곤이 게임 후반에도 손쉬운 골드 공급원이 아니라 주요 목표다운 위력을 보여줄 수 있을 것입니다.
공격력: 145 110
신규방어력 및 마법 저항력 증가: 9레벨 이후 레벨당 방어력이 +13, 마법 저항력이 +5.85씩 증가합니다.
신규현재 체력 비례 피해: 현재 체력의 5%(9레벨 이후 레벨당 +0.5%씩 상승)를 물리 피해로 입힙니다.
신규피해량 감소 효과: 효과를 받고 있는 챔피언이 입히는 총 피해량이 20% 감소합니다.
삭제공격 속도 둔화 효과: 공격 속도 -20%


반응형
반응형



DB2가 설치된 서버에서 hostname 을 변경할 경우 DB2 내부에 설정해주지 않으면 

DB2 SQL1042C 에러가 발생하며 정상적으로 서비스가 올라오지 않는다.


이때 db2nodes.cfg 파일이 있는 경우 내부의 hostname만 변경해주면 된다.

(경로는 ${DB2PATH}/sqllib/db2nodes.cfg)


순서는 아래와 같다.


1. db2 get dbm cfg  -> 호스트 명 설정된 내역 확인.


2. db2stop    (db2nodes.cfg 파일은 인스턴스가 실행 중일 떄 잠기므로 인스턴스를 중지시켜야 한다.)

3. (서버의 호스트 이름 변경)

4. 각 DB2 인스턴스에 대한 항목을 .rhosts 파일에 추가하십시오. 다음을 추가하여 파일을 갱신하십시오.


hostname db2instance


여기서 hostname은 데이터베이스 서버의 TCP/IP 호스트 이름이고db2instance는 데이터베이스 서버에 액세스하는 데 사용하는 인스턴스의 이름입니다. 참여하는 각 서버의 db2nodes.cfg 파일에 항목을 추가하십시오. 맨 처음 db2nodes.cfg파일에는 다음과 같은 항목이 하나 있어야 합니다.

     0 ServerA 0


이 항목은 데이터베이스 파티션 서버 번호(노드 번호), 데이터베이스 파티션 서버가 있는 서버의 TCP/IP 호스트 이름 및 데이터베이스 파티션 서버의 논리적 포트 번호를 포함합니다.


예를 들어, 각 컴퓨터의 데이터베이스 파티션 서버 및 네 개의 컴퓨터를 가진 파티션된 구성을 설치하는 경우 갱신된 db2nodes.cfg는 다음과 유사하게 표시됩니다.

     0 ServerA 0

     1 ServerB 0

     2 ServerC 0

     3 ServerD 0


5. db2start


----------------------------------------------------------------------------------------------------------------


출처 : http://www.thefillmoregroup.com/blog/?p=66


하지만 문제가 있다.

만약 설치 환경에 따라서 db2nodes.cfg 파일이 존재하지 않는 경우가 있는데

이때는 아래의 과정을 실행하면 된다.


1. I don’t find the db2nodes.cfg file.

2. I run the commands “db2set” and db2extsec, 


old_hostname: SIETE2003

new_Hostname: VS3K-MONBANCO1


->cmd

->db2cmd

->db2admin stop

->db2stop

->db2set -g DB2SYSTEM=VS3K-MONBANCO1

->db2set -g DB2_EXTSECURITY=NO

->db2set –all


->db2 list admin node directory show detail

->db2 uncatalog node SIETE200

->db2 catalog admin tcpip node VS3KMONB remote VS3K-MONBANCO1 system VS3K-MONBANCO1

->db2 update admin cfg using DB2SYSTEM VS3K-MONBANCO1

->db2 update admin cfg using SMTP_SERVER VS3K-MONBANCO1  (SMTP 서버를 설정한 경우)


–>change the hosstname


->cmd

->db2cmd

->db2admin stop

->db2extsec -a VS3K-MONBANCO1\DB2ADMNS -u VS3K-MONBANCO1\DB2USERS

->db2admin start

->db2start


----------------------------------------------------------------------------------------------------------------


DB2에 GUI client로 붙어서 사용할 수 있는 DAS server를 띄워놓은 경우라면
추가적으로 다음을 수행할 필요도 있을 수 있겠으나,
DAS를 사용하지 않는 것이 일반적인 환경이니, 참고만 하면 되겠다.

  1. db2 admin stop
  2. db2 uncatalog node <old_hostname>
  3. db2 catalog admin tcpip node <new hostname> remote <new hostname> system <new hostname>
  4. db2 update admin cfg using DB2SYSTEM <new hostname>
  5. db2 update admin cfg using SMTP_SERVER <new hostname>
  6. db2admin start
  7. Remove the entry from Control Center for the server with old hostname and then execute a server's discover with the new hostname


반응형

'DB > DB2' 카테고리의 다른 글

DB2 원격 접속하기  (0) 2014.04.04
반응형

DB2 데이터 베이스 사용 시 원격 머신의 인스턴스에 존재하는 데이터베이스에 엑서스 해야함.
이때 <원격 서버 머신의 IP 주소>와 <원격 서버 포트 번호>를 이용하여 원격 노드를 등록.

- catalog tcpip node 명령어를 사용함.

DB2가 설치된 서버 머신에서 인스턴스 사용자로 로그인 하여 <IP 주소> 를 확인함. 
서버 머신의 인스턴스 구성 변수인 SVCENAME이 서비스명이면 /etc/services 파일에 정의된 포트 번호를 확인. 이 값이 뒤에 설정하게 될 db2 의 <원격 서버 포트 번호>가 됨.



1. 지역 노드 설정 


원격지에서 catalog tcpip node 명령어로 원격 서버 머신의 인스턴스를 등록함.
앞에서 확인한 <원격 서버 IP 주소>와 <원격 서버 포트 번호>를 입력한다.
등록된 원격 노드 정보는 uncatalog node 명령어로 제거할 수 있다.

ex) db2 uncatalog node <노드 명>


$> db2 catalog tcpip node <노드명> remote <IP 주소> server <포트 번호>
$> db2 list node directory




2. 원격 데이터 베이스 등록


원격 노드 또는 지역 노드에 존재하는 원격 데이터베이스 catalog db 명령어를 이용하여 원하는 데이터베이스 별칭(aliasname)으로 등록하여 엑서스 함. catalog db 명령어를 이용하여 원격 데이터베이스를 등록함. <등록할 데이터베이스 별칭>은 유니크한 데이터베이스 별칭으로 정함.


$> db2 catalog <DB 이름> as <별칭> at node <노드명>




3. Connect 문을 이용하여 원격 데이터베이스 정상 접속 확인


$> db2 connect to <별칭> user <ID> using <PASSWORD>












반응형

'DB > DB2' 카테고리의 다른 글

DB2 Server Hostname 변경하기  (0) 2014.04.04
반응형
출처 : 리그 오브 레전드


소환사 여러분

3월 22일(토) 10:31 부터 적용되는 업데이트 내용입니다.

버그 수정
• 하이머딩거가 Q - H-28G 진화형 포탑 스킬의 레벨을 높이면 사망 후 포탑 부품이
한 번에 3개씩 늘어나는 버그를 수정했습니다.

• 하이머딩거 사망 후 부활 시 간혹 주위에 떠다니는 너트 개수가 실제 포탑 설치 개수와
일치하지 않던 버그를 수정했습니다.


반응형

+ Recent posts