free명령을 통해서 나오는 cache memory의 값이 증가하는데..

rainblow의 이미지

어떤 경우에 이값이 증가를 할까요?
서버를 리부팅 하기 전까지는 지속적으로 증가를 하는군요.
과거의 경험으로 보면 웹서버나 기타 서버에서 아주 큰 로그파일을 자르지 않고 계속 write할때에 증가했었던것을 알고있는데요,
그렇지 않고 어플리케이션에서 signal처리를 잘못해서 남게되는 메세지로 인해서도 cached메모리가 증가할수 있나요?

/var/log/messages를 보니,
signal처리를 잘못했다는 로그가 지속적으로 남던데..

Quote:
application bug: XXXApplication has SIGCHLD set to SIG_IGN but calls wait().
(see the NOTES section of 'man 2 wait'). Workaround activated.

이게 cached메모리를 시스템에 치명적일정도로 증가시킬수 있는건지 알고싶습니다. messages파일은 사이즈가 그렇게 크지 않던데요..
모르는 상태서 생각하기에 시스템은 메모리가 4G입니다.

ssehoony의 이미지

캐시는 free 메모리의 대부분을 사용합니다.
그게 최근 OS의 캐시메모리 할당 정책입니다.

윈95 같은 경우는 캐시메모리를 특정 사이즈를 제한이 되어 있어서 내 컴이 1기가던 2기가던 아무리 많은 free 메모리가 남아 있어도 일정 캐시메모리를 사용하므로서 메모리의 비효율적인 사용을 했지만, 리눅스나 윈2000 등의 OS 들은 free 메모리가 있으면 계속 캐시를 늘려가게 됩니다.

최소한의 free 메모리만을 남기고 캐시를 계속 증가시켜 처리를 하다가 다른 프로그램이 메모리를 요청했는데 free 메모리가 부족하면 그 때 캐시에서 가장 사용률이 낮은 데이터를 제거 하고 free 메모리를 돌립니다.

약간의 free 메모리를 남겨두는 것은 프로그램이 메모리를 요구 했을 때, 캐시에서 빼내오면 늦기때문에 약간의 free 메모리를 남겨두어 그 메모리에서 즉시 요구하는 메모리를 반환해주고, 그 후에 캐시에서 다시 부족한 부분만큼 free 메모리를 보충하는 것이지요. (정말 훌륭하지 않습니까? :D )
물론, free 메모리 보다 더 큰 메모리를 할당을 요구 했다면 그 즉시 캐시를 제거해서 free 메모리를 확충하겠지요.

그리고 제 생각입니만, free 메모리를 확보하기 위해 무조건 캐시에서 메모리를 확충하는 것만이 아니고 swap 메모리로 swap out 을 하는게 더 좋을지 캐시를 삭제하고 공간을 만들게 좋을지 판단해서 보다 효율적인 것을 택하지 않을까? 라고 짐작합니다.

kslee80의 이미지

Quote:
그리고 제 생각입니만, free 메모리를 확보하기 위해 무조건 캐시에서 메모리를 확충하는 것만이 아니고 swap 메모리로 swap out 을 하는게 더 좋을지 캐시를 삭제하고 공간을 만들게 좋을지 판단해서 보다 효율적인 것을 택하지 않을까? 라고 짐작합니다.

Linux 의 경우,
캐시를 모두 free 메모리로 돌려도 메모리가 모자라는 경우 아니라면
swapout 하지 않습니다.
이유는 swapout 의 cost 가 너무 크기 때문입니다.

또한, cache 는 실제로 큰 가치가 없습니다.
앞으로 더이상 사용되지 않을 데이터라도 cache 영역에 자리잡고 있게 되기
때문이죠.
단지, 남아도는 메모리를 그냥 남겨놓는거 보다는
cache 로 만들어서 혹시나 해당 데이터를 다시 사용할 일이 생길때
조금 더 빠르게 반응하는것이 낫기 때문에 사용되는 방식이죠.

chaos4chaos의 이미지

우선, 잘 모르고 하는 질문이니 양해 바랍니다.

일반적으로 캐시 구조는 순차탐색을 이용하지 않나요?
순차탐색을 피하려면 캐시에 대한 테이블이 따로 정의되어 있어야 할 것 같은데..
그렇다면, 그냥 페이지 테이블을 사용하여 메모리를 참조하는 것과 별반 차이가 없을 듯 합니다.

가용 메모리의 대부분을 캐시로 사용할 때, 얻게 되는 이점이 무엇인지
궁금합니다.

캐시!하면 빠르다... 정도의 고정 관념을 가지는게 제 지식의 대부분인데... 이 경우는 flip-flop 등의 매체 자체의 특성이 아니었나 합니다.

메모리가 캐시로 사용되어 특별한 장점을 얻을려면 swap-out된 내용에 대한 이미지 등을 캐싱하고 있는 경우일 텐데... 이런 경우라면, 이미 페이지 테이블에서 유효(변경) 비트 등으로 참조하고 있지 않나요? 즉, 굳이 캐시라고 표현할 필요도 없이 페이지 테이블의 정의 자체에 유지하고 있는 정보가 아닌가 해서 질문 드립니다.

FOREVER_Ch@oS

ssehoony의 이미지

kslee80 wrote:
Quote:
그리고 제 생각입니만, free 메모리를 확보하기 위해 무조건 캐시에서 메모리를 확충하는 것만이 아니고 swap 메모리로 swap out 을 하는게 더 좋을지 캐시를 삭제하고 공간을 만들게 좋을지 판단해서 보다 효율적인 것을 택하지 않을까? 라고 짐작합니다.

Linux 의 경우,
캐시를 모두 free 메모리로 돌려도 메모리가 모자라는 경우 아니라면
swapout 하지 않습니다.
이유는 swapout 의 cost 가 너무 크기 때문입니다.

또한, cache 는 실제로 큰 가치가 없습니다.
앞으로 더이상 사용되지 않을 데이터라도 cache 영역에 자리잡고 있게 되기
때문이죠.
단지, 남아도는 메모리를 그냥 남겨놓는거 보다는
cache 로 만들어서 혹시나 해당 데이터를 다시 사용할 일이 생길때
조금 더 빠르게 반응하는것이 낫기 때문에 사용되는 방식이죠.

그렇다면 2기가 메모리 시스템에서 캐시가 1기가가 넘어가고 있는데도 불구하고 swap out 된 자료가 있는 이유는 어떤 원리에서인가요?

kslee80의 이미지

Linux 가 메모리상에 cache 영역을 남기는 것을 구분하자면
page cache 와 disk cache 로 나눌 수가 있죠.

page cache 는 빈번히 일어나는 메모리 할당/해제의 오버헤드를 줄이기 위해서
고안된 cache 이고,
disk cache 는 디스크를 읽는 횟수를 줄이기 위한 cache 입니다.
실제로 성능향상을 가져오는 것은 disk cache 라고 생각합니다.
(메모리나 CPU 에 비해서 그만큼 디스크가 느리기 때문이죠)

disk cache 는 VFS 레이어와 많은 상관관계를 가지고 있죠.
마운트한 파일시스템의 superblock 같은 메타데이터를 캐싱하는 것도
disk cache 에 포함되는 것이니 말이죠.

disk 상에서 특정 파일을 액세스 하는 경우,
해당 파일의 inode 에 붙는 디엔트리 객체에 disk cache 가 연결됩니다.
해당 파일을 더이상 사용하지 않더라도 읽어들인 내용을
그대로 메모리상에 유지하죠.
그 이후에 다시 해당 파일을 액세스 하는 경우에는 디스크 액세스를 하지 않고
메모리상에 남아있는 내용을 그대로 사용하죠.
이 경우의 성능향상은 압도적이죠.

Quote:
그렇다면 2기가 메모리 시스템에서 캐시가 1기가가 넘어가고 있는데도 불구하고 swap out 된 자료가 있는 이유는 어떤 원리에서인가요?

부팅된 이후 특정 시점에서 메모리 부족 현상이 발생하여
사용중인 페이지의 일부가 swapout 된 이후 메모리 부족 현상이 해소된다면
그런 현상이 발생합니다

수정) 틀린 내용이 있어 수정했습니다.
swap 영역이 줄어드는것을 "실제로" 보질 못해서 잘못 적었었네요.

ssehoony의 이미지

kslee80 wrote:

swap 영역의 사용량은 리부팅 하지 않는한 줄어들지 않습니다.
즉, 부팅된 이후 특정 시점에서 메모리 부족 현상이 발생하여
사용중인 페이지의 일부가 swapout 된 이후 메모리 부족 현상이 해소된다면
그런 현상이 발생합니다

swap 영역은 리붓하지 않아도 줄어듭니다.
swap in 이 됐을 경우나 swap 부분을 메모리를 이용하는 녀석이 종료됐을 때죠.

그리고 캐시 사이즈가 0 가 아닌데도 swap out 을 한다면 위의 논리가 틀린거 아닌가요? 그런 경우 많이 보시지 않으셨습니까?

익명 사용자의 이미지

한번 스왑되었던 메모리는 다시 읽혀질때까지 램으로 올라오지 않습니다. 램이 남고 캐시가 할당되어 있어도 스왑이 있을때는 이런 경우죠

익명 사용자의 이미지

디스크 캐시의 개념원리에 대해 잘나온 KLDP 자료

http://doc.kldp.org/Translations/html/SysAdminGuide-KLDP/buffer-cache.html

kslee80의 이미지

Quote:
swap 영역의 사용량은 리부팅 하지 않는한 줄어들지 않습니다.

이 말은 틀렸었군요 ;;
떠 있는 프로세스 중에 스왑 아웃되어 있을만한 녀석을 죽여보니 swap 이 줄어드는군요.

그리고 위쪽 답변에서 간단히 쓰려고 안 적은 내용이 있는데...
cache 크기는 0이 될 수 없습니다.
항상 캐시하며, 메모리가 모자라는 경우에도 해제하지 않는 cache 가 존재하기 때문이죠.
대표적인 것이 Filesystem 의 superblock 같은 메타데이타들입니다.
이녀석들은 unmount 하기 전에는 캐시를 없애지 않습니다.

익명 사용자의 이미지

Quote:
때때로, 실제 메모리가 많이 비어 있는데도 불구하고 스왑을 아주 많이 쓰고 있는 경우를 보게 될 수가 있다. 보통 이런 일이 발생하는 경우는 이렇다. 어떤 덩치 큰 프로세스가 실제 메모리를 많이 점유하는 바람에 시스템이 스왑을 많이 사용하게 되었다고 하자. 이 프로세스가 종료되면 실제 메모리엔 여유 공간이 많이 남게 되지만, 스왑으로 한번 내려간 데이터는 그것이 당장 필요하지 않는 한 실제 메모리로 불려지지 않는다. 따라서 스왑 영역을 많이 사용하면서도 실제 메모리가 많이 비어있는 현상이 꽤 오래 지속될 수 있는 것이다. 그러므로 이런 현상에 특별히 신경쓸 필요는 없다. 하지만, 최소한 그 원리는 이해하고 있어야 나중에 불안하지 않을 것이다

http://doc.kldp.org/Translations/html/SysAdminGuide-KLDP/x1566.html

rainblow의 이미지

그렇다면 cached메모리가 증가하는것이 시스템에 치명적일수 있다는것과는 전혀 관계가 없는것인가요?
아주 자연스런 현상일까요?

어떤 서버는 cached 메모리가 지속적으로 증가하여 4G메모리중에서 절반정도인 2G정도의 용량을 차지합니다.

그렇더라도 시스템에 문제가 생기지는 않는다는 말씀이시군요.
얼마전에 그 서버중 한대가 ping은 되지만 ssh나 telnet등의 연결을 해당 어플리케이션에 연결시키지 못하는 현상이 발생했었습니다. 참고로 서버OS는 RH9.0입니다.
콘솔에는

Quote:

Uhhuh. MMI received. Dazed and confused, but.. RAM이 어쩌구..

과 같은 메세지가 남아있었습니다.
리붓 하여 해결하긴 했는데, 이게 위의 메모리와 연관이 없을까 해서 질문했던건데, hardware의 문제일 확율이 높겠군요. cached메모리 증가가 자연스런 현상이라면..

상세한 답변 감사드립니다.

익명 사용자의 이미지

일단 캐시 메모리가 증가하는것은 OS가 메모리를 잘 활용하고 있다는 뜻이니까 좋아해야할 일이구요.. 캐시가 한없이 증가해서 실제메모리가 부족해진다면 커널 버그 리포팅을 해야할걸요?

chaos4chaos의 이미지

kslee80 wrote:
Linux 가 메모리상에 cache 영역을 남기는 것을 구분하자면
page cache 와 disk cache 로 나눌 수가 있죠.

page cache 는 빈번히 일어나는 메모리 할당/해제의 오버헤드를 줄이기 위해서
고안된 cache 이고,
disk cache 는 디스크를 읽는 횟수를 줄이기 위한 cache 입니다.
실제로 성능향상을 가져오는 것은 disk cache 라고 생각합니다.
(메모리나 CPU 에 비해서 그만큼 디스크가 느리기 때문이죠)


쩝... 한없이 궁금해지고 있습니다...
제가 알고 있던 사실이랑 조금은 차이가 있어서...... 답변 부탁드립니다.

우선 여기서 주제가 되는 메모리 캐시와 실제 캐시 메모리와는
전혀 다른 객체가 아닌가 하는 것입니다. 왠지 캐시를 위한
추가적인 자료구조가 있는 것처럼 가정을 하고 답변을 하신듯 해서
(생각일 뿐입니다.)
즉,
위에서 말하는 page cache건 buffer cache건 실제로는
일단 필요에 의해서 메모리에 올라온 페이지일 뿐이라는 겁니다.
약간 과장하면 아무런 추가적인 자료구조나 관리가 필요없는 단지 메모리상의 페이지일뿐이 아닌가 하는 것입니다.

우리가 캐시로 잡혀 있는 것처럼 보고받는 캐시 사용량은 단지 변경 비트가 set되지 않아서 해당 페이지에 대한 참조시에는 추가적인 I/O가 발생할 필요없이 다시 재사용할 수 있어서... 이를 캐시라 보고하는 것으로 알고있었습니다.
( :D 부디 소스봤냐? 라고 묻지는 마시기를)
따라서 시스템이 정적인 활동을 오래할 수록 변경 비트가 set되지 않은 페이지들은 많아질 것이고 당연히 이를 캐시인 것처럼 합산하여 보고하는 것으로 알고 있었는데....

만약, 위의 제 생각이 틀리다면, 캐시를 관리하는 추가적인 테이블이
필요할 것이고 페이지 테이블 관리에 드는 오버헤드만큼이나 시스템에게는 버거운 작업이 될 것일텐데 하는 생각입니다.

정리하면, 시스템이 캐시로 보고하는 내용은 그저 현재 프로세스 집합이 재사용가능한 페이지 집합일 뿐이다. 이의 계산은 페이지 테이블내의 변경 비트가 셋팅되지 않는 페이지의 양을 합한 것이다.... 입니다. 아닌가요?
물론, 캐시로 파악하는데 사용하는 알고리즘이 시간, 보호 여부, 공유 여부, 참조 횟수 등으로 복잡하기는 하겠지만, 이는 시스템에서 따로 관리하는 객체는 아닌 것으로 알고 있었다는.....쩝.

게다가 실제로는 캐시와 swap-out과는 그리 큰 관련이 없어야 정상아닌가요?
즉, swap-out이 메모리가 부족한 경우에 자주 발생하기는 하지만,
근본적으로는 DOM(degree of multiprogramming) 수준을 낮추기 위한 것으로, DOM의 평가는 가용 메모리의 여부로만 판단하지는 않습니다. 즉, 메모리에 여유가 있을지라도 제출된 프로세스의 수가 과다하여 스케줄링에 우선순위를 적용할 수가 없다거나, 장시간 I/O를 위해 대기한다거나 하여도 swap-out은 언제든지 발생할 수 있는 걸로 알고 있었는데....

에궁... 길어졌습니다.
질문을 정리해보자면,
1. page cache건 buffer cache건 일반적으로는 그저 재사용가능한 페이지의 수를 합산한 것에 불과하다(buffer cache의 경우 fflush의 대상이라면 당연히 cache에 잡히지 않겠죠)
2. 메모리 부족 시 swap-out이 발생하긴 하지만, 그 이외의 경우에도 언제든지 swap-out이 발생할 수 있다. 왜냐하면, 시스템이 감당하기 어려운 DOM 수준은 메모리 부족 이외에도 여러가지 상황이 있을 수 있기 때문이다.

아참.... 그리고 오래전부터 궁금했었는데..
혹시 buffer-cache와 cache-buffer의 차이점에 대해 설명해 주시면.... 월매나 감솨할까요... 언젠가 책을 보는데 캐시 버퍼에 쓴다는 표현이 있어서... 꽤 찾았었는데.... 검색에 실패했다는...

FOREVER_Ch@oS

amister의 이미지

Quote:
Linux 가 메모리상에 cache 영역을 남기는 것을 구분하자면
page cache 와 disk cache 로 나눌 수가 있죠.

page cache 는 빈번히 일어나는 메모리 할당/해제의 오버헤드를 줄이기 위해서
고안된 cache 이고,
disk cache 는 디스크를 읽는 횟수를 줄이기 위한 cache 입니다.
실제로 성능향상을 가져오는 것은 disk cache 라고 생각합니다.
(메모리나 CPU 에 비해서 그만큼 디스크가 느리기 때문이죠)

page cache는 disk cache의 일종입니다. :(

disk cache는 크게 buffer cache와 page cache로 나뉩니다. 둘 다 disk block을 캐싱한다는 점에서는 같지만, Blcok I/O는 buffer cache를 사용하고 Page I/O는 page cache를 사용합니다. 사용되는 목적과 cache 처리하는 알고리즘 등이 다르기 때문에 커널에서 구분해서 사용하는 것이죠.

caching 단위를 보면, buffer cache는 1 block을 캐싱합니다. page cache는 regular file이나 block device file의 여러개 block들로 구성되는 1 page를 캐싱합니다.

amister의 이미지

Quote:

캐시를 관리하는 추가적인 테이블이
필요할 것이고 페이지 테이블 관리에 드는 오버헤드만큼이나 시스템에게는 버거운 작업이 될 것일텐데 하는 생각입니다.

맞습니다. 추가적인 오버헤드가 발생합니다. 때문에 굉장히 효율적으로 만들어지며, 아무리 오래걸린다 한들 disk i/o 한 번 줄이는 것이 훨씬 효과가 크기 때문에 사용되는 것입니다.

Quote:

메모리 부족 시 swap-out이 발생하긴 하지만, 그 이외의 경우에도 언제든지 swap-out이 발생할 수 있다. 왜냐하면, 시스템이 감당하기 어려운 DOM 수준은 메모리 부족 이외에도 여러가지 상황이 있을 수 있기 때문이다.

저도 찾아보긴 해야 하는데... 메모리 부족상황이 아니어도 swap-out 될 수 있다고 알고 있습니다. 실제로도 메모리가 많이 남는 상황에서 swap이 사용되는 것을 확인할 수 있구요.

kslee80의 이미지

Quote:
page cache는 disk cache의 일종입니다. :(

네 맞습니다 -.-;;;
기억에 의존해서 글을 썼더니 실수가 엄청나게 많군요....
다음부터는 기억 잘 안 나는건 책을 찾아보고 써야 겠네요 :)

Quote:
위에서 말하는 page cache건 buffer cache건 실제로는
일단 필요에 의해서 메모리에 올라온 페이지일 뿐이라는 겁니다.
약간 과장하면 아무런 추가적인 자료구조나 관리가 필요없는 단지 메모리상의 페이지일뿐이 아닌가 하는 것입니다.

우리가 캐시로 잡혀 있는 것처럼 보고받는 캐시 사용량은 단지 변경 비트가 set되지 않아서 해당 페이지에 대한 참조시에는 추가적인 I/O가 발생할 필요없이 다시 재사용할 수 있어서... 이를 캐시라 보고하는 것으로 알고있었습니다.


저도 그렇게 기억합니다.
단지, 해당 페이지들의 관리는 각 페이지들에 연관된 자료구조를 통해서 하기 때문에...
추가적인 자료 구조가 필요한 것은 아니지만 관리하는 자료구조는 존재하는 셈이죠.

Quote:
즉, 메모리에 여유가 있을지라도 제출된 프로세스의 수가 과다하여 스케줄링에 우선순위를 적용할 수가 없다거나, 장시간 I/O를 위해 대기한다거나 하여도 swap-out은 언제든지 발생할 수 있는 걸로 알고 있었는데....

Linux 의 경우에는 swap-out 루틴이 동작하는 조건이
여유 메모리가 일정 값 이하로 떨어졌을때 입니다.

Quote:
게다가 실제로는 캐시와 swap-out과는 그리 큰 관련이 없어야 정상아닌가요?

캐시와 swap-out 과의 관계는 try_to_free_page() 로 인한 관계밖에는 없죠 :)
(함수 이름이 저게 맞던가...6-.-;; )
메모리 할당에 실패했을때, try_to_free_page() 가 호출되고,
이 녀석은 shrink_cache() 부터 불러서 일단 캐시부터 회수하죠
그래도 모자랄때 비로소 swap-out 루틴이 동작하게 되죠.

cache-buffer 라는 단어는 저도 첨 들어 봅니다.
실제로 용어가 있지만 아직 모르는 것일수도 있지만요 :(

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.