LinuxCentOS 서버 운영 메모 모음 — 명령어, 톰캣 OOM, 아파치 403, 폰트, SSH
2016 · 08 · 11
3 min read
페이퍼
2015~2016년에 CentOS 서버를 만지면서 한 건씩 올려두던 메모를 한 페이지로 합쳤다.
하나하나가 두세 줄짜리라 따로 두니 찾기가 더 번거로웠다.
CentOS 6 기준이다. 지금 그대로 쓸 내용은 아니고, 그때 뭐에 막혔고 어떻게 넘어갔는지의 기록이다.
자주 쓰던 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #프로그램 설치위치 찾기
which java
/usr/bin/java
#오래된 로그파일만 찾아서 삭제함
find /logs/httpd/ -type f -mtime +180 -exec rm -f {} \;
#hosts 편집
vi /etc/hosts
#dns서버 수정
vi /etc/resolv.conf
#OS 비트 확인
getconf LONG_BIT
#OS 버전 확인
cat /etc/issue
#폰트목록
fc-list
#폰트 반영 (/usr/share/fonts 에 폰트 넣고)
fc-cache -fv
#로그보기
tail -f file.log -n 1000
#crond 명령
# 목록보기
crontab -l
# 편집
crontab -e
# 톰켓 프로세스 확인
ps -ef | grep tomcat
# 프로세스 kill
kill -9 {PID}
|
find ... -mtime +180 -exec rm 은 오래된 로그를 지울 때 제일 많이 썼다.
서버에 로그가 쌓여서 디스크가 차는 일이 종종 있었다.
톰캣에서 OutOfMemory 가 자주 날 때
catalina.sh 맨 위에 아래를 추가해서 메모리를 크게 잡는다.
주의할 건 서버 메모리를 생각해서 적당히 잡아야 한다는 것.
1
| export CATALINA_OPTS="-Djava.awt.headless=true -server -Xms2048m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
|
PermGen 쪽이 터지는 경우가 많았다. MaxPermSize 와 CMSClassUnloadingEnabled 가 그 부분이다.
참고 http://stackoverflow.com/questions/88235/dealing-with-java-lang-outofmemoryerror-permgen-space-error
MySQL · MariaDB 를 utf8mb4 로
이모지까지 저장하려면 utf8 로는 안 된다. MySQL 의 utf8 은 3바이트까지만 받는다.
1. 현재 상태 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
| MariaDB [(none)]> show variables like "%character%";show variables like "%collation%";
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/|
+--------------------------+---------------------------------+
|
2. /etc/my.cnf 수정
1
2
3
4
5
6
7
8
9
| [client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
|
3. 재시작
4. 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| MariaDB [(none)]> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
|
character_set_system 은 utf8 로 남는다. 이건 원래 그렇다.
여기서 끝이 아니다. 서버 설정만 바꿨다고 되는게 아니고
실제 적용할 컬럼의 타입도 utf8mb4 로 바꿔야 한다.
이걸 빼먹으면 설정만 바뀌고 데이터는 그대로 깨진다.
쿼리 튜닝할 때 캐시 안 타게 하기
같은 쿼리를 두 번째 돌리면 캐시 때문에 빨라져서 실제 성능을 못 본다.
아래를 실행하고 재면 캐시 안 된 결과를 볼 수 있다.
아파치에서 403 이 계속 나올 때
설정을 다 맞췄는데도 403 이 나오면 SELinux 컨텍스트 문제인 경우가 많다.
1
| chcon -R --reference=/var/www /www/webroot
|
또는
1
| chcon -R -h -t httpd_sys_content_t /www/webroot
|
앞엣것은 /var/www 의 컨텍스트를 그대로 복사하는거고,
뒤엣것은 타입을 직접 지정하는거다.
jfreeChart 한글이 ㅁㅁㅁ 로 나올 때
jfreeChart 를 톰캣 위에서 돌리면 한글이 ㅁㅁㅁ 로 나온다. 서버에 폰트가 없어서다.
/usr/share/fonts 폴더에 폰트 파일을 넣고 fc-cache -fv 를 해주자.
1
2
3
4
5
6
7
8
| // 코드 상에 아래와 같이 폰트를 지정한다.
private static final Font _BASE_FONT = new Font("나눔고딕",Font.PLAIN,11);
...
중략
'''
// setFont를 적절하게 코드 내에 사용한다.
lineAndShapeRenderer.setLegendTextFont(i, _BASE_FONT);
...
|
톰캣 재시작은 필요 없다.
AWS EC2 에 패스워드로 로그인하기
EC2 는 기본적으로 password 로 ssh 접근이 안 되게 되어 있다. CentOS 6.5 기준이다.
1
2
| # 루트계정에 패스워드 지정
passwd root
|
1
2
3
4
5
6
7
8
| sudo vi /etc/ssh/sshd_config
# 아래 두개 옵션을 yes로 하고 저장후 닫기
PermitRootLogin yes
PasswordAuthentication yes
# sshd 재시작
service sshd restart
|
편하자고 여는거지 권장할 설정은 아니다. 바로 아래 키 로그인 쪽이 맞다.
SSH 키로 로그인하기
macOS 에서 키를 지정해서 비밀번호 타이핑 없이 바로 로그인하게 한다.
평소엔 보안 때문에 안 해놓는다.
macOS 에서 키 생성
1
| ssh-keygen -t rsa -C "name"
|
public key 조회.
대상 서버(CentOS)에 등록
위에서 나온 public key 를 ~/.ssh/authorized_keys 에 추가한다.
1
| vi ~/.ssh/authorized_keys
|
정리
- 오래된 로그 정리는
find -mtime +N -exec rm - 톰캣 OOM 은 대부분 PermGen.
MaxPermSize 를 올린다 - utf8mb4 는 서버 설정 + 컬럼 타입 둘 다 바꿔야 한다
- 설정 다 맞았는데 403 이면 SELinux
chcon - 서버에서 한글이 ㅁㅁㅁ 면 폰트 넣고
fc-cache -fv - 접속은 패스워드 여는 것보다 SSH 키가 낫다