[Redis]

  • 얼마나 많은 요청을 한꺼번에 처리할 수 있는지
  • 요청 하나를 처리하는 데 걸리는 시간(Latency) 등을 측정

Redis 성능 확인하기

  • 명령어를 사용하기 위한 경로
root@97bd8fbf6f8d:/usr# 
  • 명령어 결과
root@97bd8fbf6f8d:/usr# redis-benchmark
====== PING_INLINE ======
  100000 requests completed in 2.79 seconds        # 만 개의 명령을 처리하는 데 걸린 시간 2.79초
  50 parallel clients                            # 50개의 클라이언트 동시 연결
  3 bytes payload                                # 저장 데이터의 크기 3바이트
  keep alive: 1                                    # 클라이언트 연결 유지 상태 정보
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

0.00% <= 0.4 milliseconds
0.08% <= 0.5 milliseconds
2.13% <= 0.6 milliseconds
10.04% <= 0.7 milliseconds
25.00% <= 0.8 milliseconds
43.93% <= 0.9 milliseconds
63.18% <= 1.0 milliseconds
78.15% <= 1.1 milliseconds
87.81% <= 1.2 milliseconds
93.52% <= 1.3 milliseconds
96.47% <= 1.4 milliseconds
98.01% <= 1.5 milliseconds
98.73% <= 1.6 milliseconds
99.11% <= 1.7 milliseconds
99.33% <= 1.8 milliseconds
99.45% <= 1.9 milliseconds
99.54% <= 2 milliseconds
99.92% <= 3 milliseconds
99.98% <= 4 milliseconds
100.00% <= 4 milliseconds
35842.29 requests per second                    # 초당 처리된 명령 수

====== PING_BULK ======
  100000 requests completed in 2.71 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

54.86% <= 1 milliseconds
99.78% <= 2 milliseconds
99.98% <= 3 milliseconds
100.00% <= 3 milliseconds
36954.91 requests per second

====== SET ======
  100000 requests completed in 2.87 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

65.98% <= 1 milliseconds
99.96% <= 2 milliseconds
100.00% <= 2 milliseconds
34867.50 requests per second

====== GET ======
  100000 requests completed in 2.83 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

66.07% <= 1 milliseconds
99.98% <= 2 milliseconds
100.00% <= 2 milliseconds
35360.68 requests per second

====== INCR ======
  100000 requests completed in 2.82 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

66.94% <= 1 milliseconds
99.99% <= 2 milliseconds
100.00% <= 2 milliseconds
35486.16 requests per second

====== LPUSH ======
  100000 requests completed in 2.87 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

64.74% <= 1 milliseconds
99.95% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
34806.82 requests per second

====== RPUSH ======
  100000 requests completed in 2.87 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

64.67% <= 1 milliseconds
99.87% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
34867.50 requests per second

====== LPOP ======
  100000 requests completed in 2.89 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

65.48% <= 1 milliseconds
99.92% <= 2 milliseconds
100.00% <= 3 milliseconds
100.00% <= 3 milliseconds
34602.07 requests per second

====== RPOP ======
  100000 requests completed in 2.91 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

64.82% <= 1 milliseconds
99.96% <= 2 milliseconds
100.00% <= 2 milliseconds
34399.72 requests per second

====== SADD ======
  100000 requests completed in 2.94 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

0.00% <= -33 milliseconds
0.03% <= -32 milliseconds
0.04% <= 0 milliseconds
58.66% <= 1 milliseconds
99.55% <= 2 milliseconds
99.98% <= 3 milliseconds
100.00% <= 3 milliseconds
34013.61 requests per second

====== HSET ======
  100000 requests completed in 2.96 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

61.09% <= 1 milliseconds
99.89% <= 2 milliseconds
100.00% <= 2 milliseconds
33726.81 requests per second

====== SPOP ======
  100000 requests completed in 2.74 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

64.93% <= 1 milliseconds
99.94% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
36496.35 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
  100000 requests completed in 2.88 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

63.70% <= 1 milliseconds
99.95% <= 2 milliseconds
100.00% <= 2 milliseconds
34698.12 requests per second

====== LRANGE_100 (first 100 elements) ======
  100000 requests completed in 3.45 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

47.14% <= 1 milliseconds
99.90% <= 2 milliseconds
100.00% <= 2 milliseconds
28993.91 requests per second

====== LRANGE_300 (first 300 elements) ======
  100000 requests completed in 5.92 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

0.01% <= 1 milliseconds
97.25% <= 2 milliseconds
99.96% <= 3 milliseconds
100.00% <= 3 milliseconds
16889.04 requests per second

====== LRANGE_500 (first 450 elements) ======
  100000 requests completed in 7.05 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

0.00% <= 1 milliseconds
84.77% <= 2 milliseconds
99.68% <= 3 milliseconds
99.96% <= 4 milliseconds
100.00% <= 4 milliseconds
14176.35 requests per second

====== LRANGE_600 (first 600 elements) ======
  100000 requests completed in 8.47 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

0.00% <= -32 milliseconds
0.00% <= -31 milliseconds
0.02% <= -30 milliseconds
0.03% <= 0 milliseconds
0.04% <= 1 milliseconds
20.78% <= 2 milliseconds
97.89% <= 3 milliseconds
99.84% <= 4 milliseconds
99.94% <= 5 milliseconds
99.99% <= 6 milliseconds
100.00% <= 6 milliseconds
11800.80 requests per second

====== MSET (10 keys) ======
  100000 requests completed in 3.03 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

49.40% <= 1 milliseconds
99.90% <= 2 milliseconds
100.00% <= 2 milliseconds
32959.79 requests per second

성능 측정 세부 설정

  • 50 바이트와 1,024바이트의 데이터를 문자열, 리스트, set 데이터형으로 저장하고 읽어내는 데 걸리는 시간 측정 결과를 진행률을 제외하고 출력
root@97bd8fbf6f8d:/usr# redis-benchmark -d 50 -q -t get,set,lpush,lpop,sadd,spop
SET: 34566.20 requests per second
GET: 35511.36 requests per second
LPUSH: 34698.12 requests per second
LPOP: 34518.46 requests per second
SADD: 33978.93 requests per second
SPOP: 34770.52 requests per second

root@97bd8fbf6f8d:/usr# redis-benchmark -d 1024 -q -t get,set,lpush,lpop,sadd,spop
SET: 34129.69 requests per second
GET: 34734.29 requests per second
LPUSH: 33715.44 requests per second
LPOP: 33222.59 requests per second
SADD: 34806.82 requests per second
SPOP: 34566.20 requests per second
  • 데이터의 크기가 20배 정도 늘었으나 읽기와 쓰기 횟수는 10% 정도 차이 밖에 나지 않는다.
  • 백만 개의 키를 문자열 데이터로 추가하는 테스트 명령
root@97bd8fbf6f8d:/usr# redis-benchmark -t set -n 1000000 -r 1000000
====== SET ======
  1000000 requests completed in 29.68 seconds        # 백만 개의 데이터를 입력하는 데 약 29초 소요
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

0.00% <= -32.8 milliseconds
0.00% <= -32.7 milliseconds
0.00% <= -32.6 milliseconds
0.00% <= -32.5 milliseconds
0.00% <= -32.4 milliseconds
0.00% <= -32.3 milliseconds
0.00% <= -32.2 milliseconds
0.00% <= -32.0 milliseconds
0.00% <= 0.4 milliseconds
0.01% <= 0.5 milliseconds
0.52% <= 0.6 milliseconds
4.87% <= 0.7 milliseconds
18.67% <= 0.8 milliseconds
39.65% <= 0.9 milliseconds
60.82% <= 1.0 milliseconds
77.10% <= 1.1 milliseconds
87.37% <= 1.2 milliseconds
93.07% <= 1.3 milliseconds
96.13% <= 1.4 milliseconds
97.75% <= 1.5 milliseconds
98.59% <= 1.6 milliseconds
99.03% <= 1.7 milliseconds
99.28% <= 1.8 milliseconds
99.43% <= 1.9 milliseconds
99.51% <= 2 milliseconds
99.87% <= 3 milliseconds
99.99% <= 4 milliseconds
100.00% <= 5 milliseconds
100.00% <= 5 milliseconds
33697.26 requests per second                    # 초당 3만 3천개 이상의 데이터를 저장

 

- 레디스 성능 측정 도구 옵션

옵션 설명 기본값
-h <hostname> 테스트를 수행하기 위해 접속할 레디스 서버의 호스트명 127.0.0.1
-p <port> 테스트를 수행하기 위해 접속할 레디스 서버의 포트 6379
-s <socket> 테스트를 수행하기 위해 접속할 레디스 서버의 유닉스 서버 소켓 -
-c <clients> 테스트를 위한 가상 클라이언트의 동시 접속 수 50
-n <requests> 각 명령의 테스트 횟수 10000
-d <size> 테스트에 사용할 데이터 크기 3*
-k <boolean> 테스트를 위한 가상 클라이언트의 접속 유지 여부 1: 접속유지,
0: 접속 유지하지 않음
-r <keyspacelen> 테스트에 사용할 랜덤 키의 범위 0
-P <numreq> 파이프라인 명령을 사용한 테스트와 파이프라인당 요청할 명령의 개수 0: 파이프라인 미사용
-q 테스트 진행 상황을 출력하지 않고 결과만 출력하기 -
--csv 테스트 결과를 csv 포맷으로 출력하기 -
-l 브레이크(ctrl + c)를 걸기 전까지 계속 수행 -
-t <tests> 쉼표로 구분된 테스트 명령의 목록 -
-l 명령 전송 없는 연결 생성 후 브레이크 입력(ctrl + c) 때까지 대기 -

 

Install Oracle with Docker

Mac 환경에서 Oracle 사용하기 위한 방법

1. Docker에 Oracle image 설치

  • 도커 이미지 찾아보기
    • oracle-xe로 검색하여 oracle-xe-11g을 설치
docker search oracle-xe

  • 도커 이미지 pull
docker pull jaspeen/oracle-xe-11g

2. Oracle Image 실행

docker run --name oracle11g -d -p 8080:8080 -p 1521:1521 jaspeen/oracle-xe-11g

3. Docker의 Oracle 실행 및 접근

docker exec -it oracle11g sqlplus

Enter user-name: system
Enter password: {oracle}

4. SqlDeveloper 툴 및 그 외 접근을 위한 정보

사용자이름: system
비밀번호 : oracle
호스트 이름: localhost
포트 : 1521
SID : xe

5. SqlDeveloper에서 접근 시 오류 해결

Local not recognize 에러로 인해 접속 불가

  • SqlDeveloper.app의 패키지 내용 보기

  • sqldeveloper.conf 파일 확인

  • Language, Country 설정 정보 입력

6. Oracle Docker에 설치 및 실습 준비 완료

'Server > docker' 카테고리의 다른 글

[Docker] Docker로 DB 사용하기  (0) 2020.06.06
  • 노트북에 DB Server 안깔고 도커로 MySQL 이미지 받아서 Container 사용하기

Docker

  • docker

    • engine (server)
      • 시스템 상의 서비스
    • client (docker command)
      • 내부 또는 외부의 docker engine으로 명령을 전달
  • docker hub

    • github와 같은 사이트
  • docker image 명령어

# 현재 docker에 있는 image 확인하기
$ docker images

# docker hub에 공유되어 있는 이미지 가져오기
$ docker pull {image_name or container_id}
  • docker container
# 컨테이너 진입하여 쉘 띄우기
$ docker exec -it {image_name} bash

# 컨테이너 실행
$ docker start {image_name or container_id}

# 컨테이너 실행 중지
$ docker stop {image_name or container_id}

# 컨테이너 전체 정지
$ docker stop $(docker ps -a -q)

# 컨테이너 삭제
$ docker rm {image_name or container_id}

Docker 설치

  • 도커 설치 후 PowerShell 실행
$ docker images

MySQL 이미지 생성 및 컨테이너 실행

  • docker-compose.yml을 이용한 실행
# file version
version: "3"

# container service

services:
  # service name
  db: 
    # mysql:version
    image: mysql:8.0.17

    container_name: {컨테이너명}

    # container access port (external:internal)
    ports:
      - "3306:3306"

    # -e option
    environment:

      # mysql password
      MYSQL_ROOT_PASSWORD: {password}

    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

    # -v option (dir mount settings)
    volumes:
      - {local}:/var/lib/mysql
  • MySQL Container 접근
$ docker exec -it health_eat_db-mysql bash 
  • MySQL 로그인
root@~:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.17 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>                                                       

PC IP 정보로 접근하기

'Server > docker' 카테고리의 다른 글

[Docker] Docker로 Oracle 사용하기  (0) 2020.06.30

Certicates 인증서

 - SSL를 구현하려면 웹 서버에 Certificate가 있어야 한다.

 - Certificate은 암호화된 연결을 수용하는 외부 인터페이스를 보장






Certificate Keystore 준비하기

 - Tomcat에서 수용하는 keystore 타입은 JKS, PKCS11 또는PKCS12

  · JKS: Java 표준 키스토어 형식.

    JDK에 포함된 keytool 커맨드 라인툴로 생성 가능


  · PKCS12 : 인터넷 표준 형식. Open SSL이나 Microsoft Key-Manager로 조작 가능


 - keystore의 목록들은 alias의 문자열 값으로 구분할 수 있다. 대부분은 대소문자 구분을 하지 않지만, PKCS11 형식은 대소문자 구분


C:\Program Files\Java\jdk1.8.0_161\bin>keytool -genkey -keyalg RSA -sigalg SHA1withRSA -alias mySSL -keysize 2048 -keystore mySSL.jks

키 저장소 비밀번호 입력:

키 저장소 비밀번호가 너무 짧음 - 6자 이상이어야 합니다.

키 저장소 비밀번호 입력:

새 비밀번호 다시 입력:

일치하지 않습니다. 다시 시도하십시오.

키 저장소 비밀번호 입력:

새 비밀번호 다시 입력:

이름과 성을 입력하십시오.

  [Unknown]:  seok

조직 단위 이름을 입력하십시오.

  [Unknown]:  seok

조직 이름을 입력하십시오.

  [Unknown]:  seok

구/군/시 이름을 입력하십시오?

  [Unknown]:  Seuol

시/도 이름을 입력하십시오.

  [Unknown]:  Seuol

이 조직의 두 자리 국가 코드를 입력하십시오.

  [Unknown]:  KR

CN=seok, OU=seok, O=seok, L=Seuol, ST=Seuol, C=KR이(가) 맞습니까?

  [아니오]:  Y


<mySSL>에 대한 키 비밀번호를 입력하십시오.

        (키 저장소 비밀번호와 동일한 경우 Enter 키를 누름):


Warning:

JKS 키 저장소는 고유 형식을 사용합니다. "keytool -importkeystore -srckeystore mySSL.jks -destkeystore mySSL.jks -deststoretype pkcs12"를 사용하는 산업 표준 형식인 PKCS12로 이전하는 것이 좋습니다.


C:\Program Files\Java\jdk1.8.0_161\bin>keytool -importkeystore -srckeystore mySSL.jks -destkeystore mySSL.jks -deststoretype pkcs12

소스 키 저장소 비밀번호 입력:

myssl 별칭에 대한 항목이 성공적으로 임포트되었습니다.

임포트 명령 완료: 성공적으로 임포트된 항목은 1개, 실패하거나 취소된 항목은 0개입니다.


Warning:

"mySSL.jks"을(를) Non JKS/JCEKS(으)로 이전했습니다. JKS 키 저장소가 "mySSL.jks.old"(으)로 백업되 었습니다.


 - Tomcat 설정

Server.xml

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">

        <SSLHostConfig>

            <Certificate certificateKeystoreFile="conf/mySSL.jks" 

            certificateKeystorePassword="비밀번호"  

            type="RSA" />

        </SSLHostConfig>

    </Connector>


 - SSL 접근


+ Recent posts