Linux

CentOS 서버 운영 메모 모음 — 명령어, 톰캣 OOM, 아파치 403, 폰트, SSH

목차

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 쪽이 터지는 경우가 많았다. MaxPermSizeCMSClassUnloadingEnabled 가 그 부분이다.

참고 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. 재시작

1
service mysql restart

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_systemutf8 로 남는다. 이건 원래 그렇다.

여기서 끝이 아니다. 서버 설정만 바꿨다고 되는게 아니고 실제 적용할 컬럼의 타입도 utf8mb4 로 바꿔야 한다. 이걸 빼먹으면 설정만 바뀌고 데이터는 그대로 깨진다.

쿼리 튜닝할 때 캐시 안 타게 하기

같은 쿼리를 두 번째 돌리면 캐시 때문에 빨라져서 실제 성능을 못 본다. 아래를 실행하고 재면 캐시 안 된 결과를 볼 수 있다.

1
RESET QUERY CACHE;

아파치에서 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 조회.

1
cat ~/.ssh/id_rsa.pub

대상 서버(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 키가 낫다