현재 운영중인 서버의 GC 알고리즘이 궁금하다면?
~) jmap -heap 2313
Attaching to process ID 2313, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.60-b09
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2065694720 (1970.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 174063616 (166.0MB)
MaxPermSize = 174063616 (166.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 559415296 (533.5MB)
used = 379181248 (361.61541748046875MB)
free = 180234048 (171.88458251953125MB)
67.78170899352742% used
From Space:
capacity = 60293120 (57.5MB)
used = 0 (0.0MB)
free = 60293120 (57.5MB)
0.0% used
To Space:
capacity = 61341696 (58.5MB)
used = 0 (0.0MB)
free = 61341696 (58.5MB)
0.0% used
PS Old Generation
capacity = 176160768 (168.0MB)
used = 82114880 (78.31085205078125MB)
free = 94045888 (89.68914794921875MB)
46.613602411179315% used
PS Perm Generation
capacity = 174063616 (166.0MB)
used = 56193552 (53.59034729003906MB)
free = 117870064 (112.40965270996094MB)
32.28334174098739% used
22328 interned Strings occupying 2681160 bytes.
~) java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
주로 쓰는 단축키는 아래와 같이 정리합니다.
Action | ShortCut | Description |
---|---|---|
라인복사 | Shift + Alt + arrow key (방향키) | 라인을 복사합니다. |
줄편집 | Ctrl + Shift + Alt + arrow key(방향키) | 세로로 편집을 가능하도록 합니다. |
탐색기 탭 열기 | Ctrl + B | 좌측 탐색기를 엽니다. |
편집 윈도우 이동 | Ctrl + num key(숫자키) | 1번 윈도우, 2번 윈도우 포커스 이동 |
TAB 이동 (in 윈도우 내) | Ctrl + Tab, Ctrl + Page Up | 열린 윈도우 내의 TAB 이동 |
우측 윈도우로 현재 TAB 복사 | Ctrl + \ | 현재 열린 파일을 우측 윈도우로 복사한다 |
Markdown Preview | Ctrl + Shift + B | Auto-Open Markdown Preview 플러그인 |
편집기 TAB 닫기 | Ctrl + W | 현재 열린 편집기를 닫습니다. |
후행 Trim() | Ctrl + K, Ctrl + X | 선택된 문자열의 후행 공백을 제거합니다. |
파일 > 기본설정 > 바로가기 키 를 선택한 후 수정하면 keybindings.json
파일이 생성됩니다.
아래와 같이 재정의를 합니다.
// 키 바인딩을 이 파일에 넣어서 기본값을 덮어씁니다.
[
// 키 바인딩을 이 파일에 넣어서 기본값을 덮어씁니다.
[
// 라인 삭제 재정의 및 키 바인딩 삭제 (- 표기)
{ "key": "ctrl+shift+d", "command": "editor.action.deleteLines", "when": "editorTextFocus && !editorReadonly" },
{ "key": "ctrl+shift+d", "command": "-workbench.view.debug" },
// 라인복사 재정의 및 키 바인딩 삭제 (- 표기)
{ "key": "ctrl+alt+down", "command": "editor.action.copyLinesDownAction", "when": "editorTextFocus && !editorReadonly" },
{ "key": "ctrl+alt+up", "command": "editor.action.copyLinesUpAction", "when": "editorTextFocus && !editorReadonly" },
{ "key": "ctrl+alt+up", "command": "-editor.action.insertCursorAbove", "when": "editorTextFocus" },
{ "key": "ctrl+alt+down", "command": "-editor.action.insertCursorBelow", "when": "editorTextFocus" },
// 문서 formatting (- 표기)
{ "key": "ctrl+shift+f", "command": "editor.action.formatDocument", "when": "editorHasDocumentFormattingProvider && editorTextFocus && !editorReadonly" },
{ "key": "ctrl+shift+f", "command": "-search.action.focusActiveEditor","when": "searchInputBoxFocus && searchViewletVisible" },
{ "key": "ctrl+shift+f", "command": "-workbench.action.findInFiles", "when": "!searchInputBoxFocus"},
{ "key": "ctrl+shift+h", "command": "-workbench.action.replaceInFiles"},
{ "key": "ctrl+shift+h", "command": "editor.action.startFindReplaceAction" },
// 문서내 검색
{ "key": "ctrl+h", "command": "workbench.view.search", "when": "!searchViewletVisible"},
{ "key": "ctrl+h", "command": "-editor.action.startFindReplaceAction"},
{ "key": "ctrl+shift+f", "command": "-workbench.view.search", "when": "!searchViewletVisible"},
// 문서 언어 변경 (- 표기)
{ "key": "ctrl+l", "command": "workbench.action.editor.changeLanguageMode"},
{ "key": "ctrl+k m", "command": "-workbench.action.editor.changeLanguageMode"},
// VSC 명령어 Command 열기
{ "key": "alt+oem_3", "command": "workbench.action.showCommands"},
{ "key": "f1", "command": "-workbench.action.showCommands"},
{ "key": "ctrl+oem_3", "command": "-workbench.action.terminal.toggleTerminal" },
{ "key": "ctrl+shift+c", "command": "workbench.action.terminal.toggleTerminal"},
// VSC Console 열기
{ "key": "ctrl+shift+c", "command": "-workbench.action.terminal.openNativeConsole", "when": "!terminalFocus" },
// 대소문자 변경 단축키 설정
{ "key": "ctrl+shift+u", "command": "editor.action.transformToUppercase"},
{ "key": "ctrl+shift+u", "command": "-workbench.action.output.toggleOutput"},
{ "key": "ctrl+shift+alt+u", "command": "editor.action.transformToLowercase"},
{ "key": "ctrl+shift+alt+oem_5", "command": "workbench.action.splitEditor"},
{ "key": "ctrl+oem_5", "command": "-workbench.action.splitEditor"},
{ "key": "ctrl+shift+alt+oem_6", "command": "workbench.action.toggleEditorGroupLayout"},
{ "key": "shift+alt+1", "command": "-workbench.action.toggleEditorGroupLayout"}
]
]
// 설정을 이 파일에 넣어서 기본 설정을 덮어씁니다.
{
"files.autoSave": "afterDelay",
"git.confirmSync": false,
"workbench.statusBar.visible": true,
"window.zoomLevel": 0,
"editor.detectIndentation": false,
// Controls if the minimap is shown
"editor.minimap.enabled": false,
"git.enableSmartCommit": true,
// Controls whether the editor should render indent guides
"editor.renderIndentGuides": false,
// Should the project be opened using a New Window when you click the Status Bar?
"projectManager.openInNewWindowWhenClickingInStatusBar": true,
"terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\WindowsPowerShell\\v1.0\\powershell.exe",
// 입력하는 동안 제안을 자동으로 표시할지 여부를 제어합니다.
"editor.quickSuggestions": {
"other": true,
"comments": true,
"strings": true
},
// 붙여넣은 콘텐츠의 서식을 편집기에서 자동으로 지정할지 여부를 제어합니다. 포맷터는 반드시 사용할 수 있어야 하며 문서에서 범위의 서식을 지정할 수 있어야 합니다.
"editor.formatOnPaste": true,
"extensions.ignoreRecommendations": false,
"git.autofetch": true
}
Copy & Paste Clipboard Manager
copy된 내용을 버퍼에 저장함으로써 단순 복사및 붙여넣기의 효율을 끌어올린다.
단축키 : ctrl + `(back Quote)
MAC에서는 비슷한 프로그램으로 Alfred 3 가 존재한다.
윈도우에서 쓸 수 있는 Quick Launchy
기본 탐색기 대신에 사용하는 크롬UI형 탐색기
NotePad를 대체하고 능가하는 에디터 프로그램
- Atom 에디터, SublimeText2 가 비슷한 유형의 프로그램으로 존재한다.
윈도우용 Teminal 프로그램
소켓의 실체는 TCP/IP 소프트웨어 내부의 메모리영역이다. 소켓을 만들때는 먼저 OS요청을 하여 소켓 하나 만큼의 메모리 영역을 확보합니다. 그 후 확보한 메모리 영역에 제어 정보를 기록해 나갑니다. 그 정보는 정의하는 프로토콜의 종류에 따라 다릅니다.
소켓을 만들고 통신할 준비가 끝나면 socket을 호출한 어플리케이션에게 디스크립터를 돌려줍니다. 디스크립터라는 것은 TCP/IP 소프트웨어 내부에 있는 다수의 소켓 중 어느것을 가리키는가 하는 정보입니다.
서버와 클라이언트 사이의 소켓이 생성이 되면 논리적인 통로(pipe)가 만들어진다. 그 논리적인 통로를 통해서 데이터를 주고 받는다. 이를 커넥션 이라고도 하고 세션이라고도 한다.
[접속단계]
(->) 데이터를 보내려고 합니다.
(<-) 알았습니다. 이쪽에서 데이터를 보내겠습니다.
(->) 알았습니다.
[데이터 송.수신 단계]
(->) 데이터 송신
(<-) 수신 확인 응답 전송
[접속 종료]
(<-) 이것으로 데이터는 끝입니다.
(->) 알았습니다.
(->) 이쪽도 보내는 데이터는 없습니다.
(<-) 알았습니다.
20 Byte 형식의 Header 정보 TCP 프로토콜 관련 wikipdia
TCP Header 생성후 IP 헤더를 만들어서 그 앞에 붙입니다. 가장 중요한 것은 패킷을 어디로 보낼지를 결정하는 IP 주소입니다.
Ethernet에서 데이터를 통신을 하기 위해 필요한 정보 송신자 MAC 주소, 수신자 MAC 주소 정보가 담긴다. broadcast 후 해당 장비만 그 정보를 취하고 나머지 장비는 그 정보를 버립니다.
ARP (Address Resolution Protocol) 프로토콜을 통해서 획득한다. 이더넷은 보낸 신호가 모두에게 도달하므로 그 특성을 이용해서 정보를 획득한다. ‘xxx.xxx.xxx.xxx’ 주소를 가진 분 있습니까? MAC 정보를 알려주세요~ 해당 주소를 가진 장비가 본인의 MAC 정보를 응답합니다.
|Application|
|TCP/IP 소프트웨어|
|LAN 드라이버|
|확장버스 슬롯|
|LAN 카드|
RJ-45 커넥터 - MAU - Ethernet Controller - Buffer Memory
|
ROM
송신용 신호선, 수신용 신호선 별도로 존재
디지털 신호를 전기신호로 나타낼 때는 0,1 비트값을 일정한 전압이나 전류의 값으로 변경합니다. 이렇게 전기 신호를 디지털 데이터로 표현이 가능합니다.
32bit IP주소(ipv4) 를 일일이 기억할 수 없어서 그와 매핑된 Domain을 관리하는 시스템 네트워크 통신 즉 소켓 통신시에 필요한 IP 정보획득 (port 별도)
요청항목 | 설명 |
---|---|
이름 | 서버나 메일 배송처의 이름 |
클래스 | 이름의 클래스, 인터넷 IN 고정 |
타입 | A: 등록되어 있는 서버명 IP 회답 MX : 이름은 메일 배송처 나타냄 |
0×12345678
|0×12|0×34|0×56|0×78|
낮은주소 —> 높은주소
0×12345678
|0×78|0×56|0×34|0×12|
낮은주소 —> 높은주소
Big-Endian
만 사용한다.잘못된 네트워크 연결 또는 구성으로 인해 2계층에서 루프가 생성되고
브로드 캐스트, 멀티 캐스트 또는 알 수 없는 유니 캐스트가 반복적으로 전송 될 수 있습니다.
반복되는 전송은 네트워크 리소스를 낭비 할 수 있으며 때때로 네트워크를 마비시킬 수 있습니다.
루프 감지 매커니즘은 루프가 발생할 때 즉시 로그를 생성하므로 네트워크 연결 및 구성을 조정하도록
즉시 알려줍니다. 루프 감지를 통해 루프된 포트를 종료 할 수 있습니다.
아래 이름을 참고로 intellij에서 단축키 정보를 변경합니다.
Eclipse | IntelliJ IDEA | Description |
---|---|---|
F4 | ctrl+h | show the type hierarchy |
ctrl+alt+g | ctrl+alt+F7 | find usages |
ctrl+shift+u | ctrl+f7 | finds the usages in the same file |
alt+shift+r | shift+F6 | rename |
ctrl+shift+r | ctrl+shift+N | find file / open resource |
ctrl+shift+x, j | ctrl+shift+F10 | run (java program) |
ctrl+shift+o | ctrl+alt+o | organize imports |
ctrl+o | ctrl+F12 | show current file structure / outline |
ctrl+shift+m | ctrl+alt+V | create local variable refactoring |
syso ctrl+space | sout ctrj+j | System.out.println(“”) |
alt + up/down | ctrl + shift + up/down | move lines |
ctrl + d | ctrl + y | delete current line |
??? | alt + h | show subversion history |
ctrl + h | ctrl + shift + f | search (find in path) |
ctrl + 1 or ctrl + shift + | ctrl + alt + v | introduce local variable |
alt + shift + s | alt + insert | generate getters / setters |
ctrl + shift + f | ctrl + alt + l | format code |
ctrl + y | ctrl + shift + z | redo |
ctrl + alt + h | ctrl + alt + h | (same!) show call hierarchy |
- | ctrl + alt + f7 | to jump to one of the callers of a method |
ctrl + shift + i | alt + f8 | evaluate expression (in debugger) |
F3 | ctrl + b | go to declaration (e.g. go to method) |
Ctrl+J 로 TDD 시 테스트 클래스와 원 클래스의 이동 호흡을 빠르게 가져간다.
Console 로그의 시각화
기존에 사용하던 이클립스의 포맷터 파일을 임포트한다.
http://blog.woniper.net/205
Go to File -> Settings -> Editor -> General -> Code Folding
아래 체크 해제 (개인취향)
Uncheck Show code folding outline
imports
One-line methods
main, sysout 등 이클립스에서 사용하던 축약 템플릿 관련 설정
To Register Intellij Live Template
환경설정에서 Live Template을 등록한다.
하단에 보이는 context 지정을 통해서 어떤 환경에서
해당 Live Template을 사용할 지 결정해야 한다.
Plug-ins | JavaDoc | Create JavaDocs for the selected element
의 단축키를 변경한다.import static ch.lambdaj.Lambda.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
config file location
Applications/IntelliJ IDEA.app/Contents/bin/idea.properties
in idea.properties
idea.popup.weight=heavy
idea.dynamic.classpath=false
swing.bufferPerWindow=false
CVS_PASSFILE=~/.cvspass
idea.smooth.progress=false
idea.max.intellisense.filesize=2500
idea.xdebug.key=-Xdebug
idea.jre.check=true
apple.awt.fullscreencapturealldisplays=false
idea.cycle.buffer.size=10240
com.apple.mrj.application.live-resize=false
java.endorsed.dirs=
sun.java2d.noddraw=true
sun.java2d.pmoffscreen=false
idea.use.default.antialiasing.in.editor=false
idea.fatal.error.notification=disabled
apple.awt.graphics.UseQuartz=true
idea.no.launcher=false
sun.java2d.d3d=false
apple.laf.useScreenMenuBar=true
File >> Settings >> Editor >> Inspections >> Spelling >> Typo
를 선택해제한다.
듀얼모니터를 사용하는 경우 현재 실행되고 있는 window를 별도의 창으로 확장한다. 각 창의 우상단에 있는 환경설정 마크를 통해서 windowed Mode를 선택하도록 한다.
문장의 처음/끝 이동
- Ctrl+A, Ctrl+E
단어 단위 이동
- Ctrl+방향키
화면정리 (Clear)
- Ctrl+L
스크롤 멈춤/재시작
- Ctrl+S, Ctrl+Q
현재 디렉토리 위치 확인
- PWD
자신의 ID 정보 확인
- ID
현재 접속해있는 서버의 이름/OS 정보 확인
- uname, uname -a
- hostname (서버 호스트명 ex.tebalp_web001)
히스토리 보기
- history
바로 직전 히스토리 재실행
- !!
바로 직전 명령의 마지막 Argument
- !$
파일의 종류를 판단하는 명령어
- file
사용자변수
- 보통 소문자로 명명
- x=1
- x="hello"
- x=hello world
사용자변수 가져오기
- echo x
- echo $x
- echo ${x}
- echo "$x"
Evaluation (수학적 값을 연산)
- backquote(`) 또는 $( )로 둘러싸기
- date_str=`date +"%Y%m%d"`
- date_str=$(date +"%Y%m%d")
- cmd="ls –alF"
- eval $cmd
환경변수 (export)
- 환경변수는 evn 명령어를 통해서 확인가능
- sub-shell에서 상속받아 사용할 수 있도록 변수를 공개
- 사용자 변수를 환경 변수로 전환
- export var1=2
File Permission
- TYPE(1) + OWNER(3) + GROUP(3) + OTHERS(3)
- TYPE :: Directory, Symbolic Link 등등
- 3자리는 READ + WRITE + EXECUTE 권한 의미
파일 소유자 변경하기
- chown 소유자ID 파일
Comparison operator
- integer
- -eq -ne -gt -ge -lt -le
- string
- < <= > >= == = != -z –n
- zero length? null?
주의사항
- -eq 연산자는 정수 연산자
- ==, = 연산자는 문자열 연산자
- 변수가 정의되지 않았거나 공백을 포함할 수 있으므로 quotation 필요
- x=“he llo”
- if [ ”$x” == “he llo” ]; then echo $x; fi
입출력 리다이렉트
- 표준 입력(standard input) – 0번
- 키보드 입력이 프로세스로 들어가는 통로
- 표준 출력(standard output) – 1번
- 프로세스가 출력한 내용이 화면으로 나오는 통로
- 표준 에러(standard error) – 2번
- 프로세스에서 발생한 에러가 화면으로 나오는 통로
- ex) ls /lkjfslfjds 2>&1 | sort
Script File
- #!
- 어떤 인터프리터 프로그램을 사용할 것인가를 지정
- #!/bin/bash
- #!/usr/bin/env python
- 권장하는 방식
- command-line arguments
- $1, $2
- $#
- exit status
- $?
사용자설정
- Bourne shell
- ~/.profile
- BASH
- login shell
- .bashrc
- non-login shell
- .bash_profile
추천설정
export TERM=xterm-256color
export LC_ALL=ko_KR.utf8
export LANG=ko_KR.utf8
export GREP_OPTIONS=’--color=always’
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
export PS1=“[\u@\h] \W\$ ”
export LESS=‘-EMR’
export EDITOR=vim
export PAGER=“less $LESS”
export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$HOME/bin
sudo traceroute 10.24.143.95 -T -p 10003
tracert -d 10.161.221.136 (window)
tracetcp 10.161.221.136:3306 -n
netstat -an | grep "연동서버 IP"
cat /etc/shadow | wc -l
- option
-c : 문자수만 보여줌
-m : 캐릭터수만 보여줌
-l : 라인수만 보여줌
-w : 단어수만 보여줌
-L : 가장 긴줄 한줄만 보여줌
용량이 큰 로그 파일에서 2011-03-08 10:20:XX 가 들어있는 부분까지만 bbb.txt로 내보내기
cat 파일명 | grep "^2011-03-08 10:20:[0-9][0-9]" >> bbb.txt
대소문자 구분하지 않고 검색하기
> grep -i 'content_id' umon.log
앞에 줄번호 붙이기
> grep -n "content"
바이너리 파일 grep
> grep -a 'test' binary.log
특정 문자열이 포함된 ROW는 출력하지 않는다.
> grep -v 'test' binary.log
Stream Edior 대화식 에디터가 아닌 흘러 들어오는 텍스트를 그대로 편집하는 프로그램 VIM은 특정 파일을 오픈하여 실시간으로 편집하는 스크린 에디터이다. ED 라는 라인 에디터도 존재하지만 사용률은 미미하다.
start line - end line 까지 로그 자르기 (라인수 기준)
> sed -n '100,200p' catalina.log > temp
특정문자가 포함된 문자열 삭제 (0000000000가 들어간 줄은 삭제하고 출력한다.)
> sed '/0000000000/d' test.txt
특정문자를 신규문자로 치환한다. (문서내의 addrass -> address 로 변경)
> sed 's/addrass/address/' test.txt
특정문자가 포함된 문자열만 삭제하지 않는다 (0000000000이 들어간 문자열만 출력한다.)
> sed '/0000000000/!d' test.txt
공백라인을 삭제한다.
> sed '/^$/d' test.txt
한 줄 안에 포함된 모든 문자를 치환한다.
> sed "s/test/test2/g"
대소문자 구분을 하지 않는다
> sed "s/Windows XP/Windows/i"
> sed "s/Widdows XP/Windows/gi" // 두가지 옵션을 같이 설정할 때