Primrose Docs
  • Home
    • ⛓️Blockchain
      • Avalanche
        • What is AVAX?
      • Ethereum
        • Ethereum Cancun Upgrade Explained(draft)
        • go-ethereum: gas estimate
        • Blockchain Transaction Lifecycle
        • Mempool
        • Gas optimization in Solidity, Ethereum
      • Solidity DeepDive
        • Meta transaction
        • solidity: patterns
        • UUPS vs Transparent
        • Solidity Interface
        • Smart contract storage
        • ERC-2981 Contract
        • Solidity modifier
        • Solidity delete keyword
        • How To Make NFTs with On-Chain Metadata - Hardhat and JavaScript
        • How to Build "Buy Me a Coffee" DeFi dapp
        • How to Develop an NFT Smart Contract (ERC 721) with Alchemy
        • Upgradeable Contract
        • Smart Contract Verification
      • Common
        • Eigenlayer
        • MultiSig(draft)
        • Chain-Based Proof-of- Stake, BFT-Style Proof-of-Stake
        • Byzantine Fault Tolerance
        • Zero-knowledge
        • Hierarchical Deterministic Wallet
        • Maker DAO
        • Defi
        • Uniswap
        • IBC
        • Cosmos
        • Gossip Protocol
        • Tendermint
        • UTXO vs Account
        • Blockchain Layer
        • Consensus Algorithm
        • How does mining work?
        • Immutable Ledger
        • SHA256 Hash
        • Filecoin
        • IPFS - InterPlanetary File System
        • IPFS와 파일코인
        • Livepeer
        • Layer 0
      • Bitcoin
        • BIP for HD Wallet
        • P2WPKH
        • Segwit vs Native Segwit
    • 📖Languages
      • Javascript/Typescript
        • Hoisting
        • This value in Javascript
        • Execution Context
        • About Javscript
        • tsconfig.json
        • Nest js Provider
        • 'return await promise' vs 'return promise'
      • Python
        • Pythonic
        • Python: Iterable, Iterator
        • Uvicorn & Gunicorn
        • WSGI, ASGI
        • Python docstring
        • Decorator in Python
        • Namespace in Python
        • Python Method
      • Go
        • GORM+MySQL Connection Pool
        • Context in golang
        • How to sign Ethereum EIP-1559 transactions using AWS KMS
        • Mongo DB in golang(draft)
        • Golang HTTP Package
        • Panic
        • Golang new/make
        • golang container package
        • errgroup in golang
        • Generic Programming in Golang
        • Goroutine(draft)
    • 📝Database
      • MongoDB in golang
      • Nested loop join, Hash join
      • DB Query plan
      • Index
      • Optimistic Lock Pessimistic Lock
    • 💻Computer Science
      • N+1 query in go
      • Web server 를 구성할 때 Thread, Process 개수를 어떻게 정할 것인가?
      • CAP
      • Socket programming
      • DNS, IP
      • URL, URI
      • TLS과 SSL
      • Caching(draft)
      • Building Microservices: Micro Service 5 Deploy Principle
      • Red Black Tree
      • AOP
      • Distributed Lock
      • VPC
      • Docker
      • All about Session and JWT
      • Closure
      • Singleton Pattern
      • TCP 3 way handshake & 4 way handshake
      • Race Condition
      • Process Address Space 
      • Call by value, Call by reference, Call by assignment
      • Zookeeper, ETCD
      • URL Shortening
      • Raft consensus
      • Sharding, Partitioning
    • 📒ETC
      • K8S SIGTERM
      • SQS
      • Git Branch Strategy: Ship / Show / Ask
      • Kafka
      • Redis Data Types
      • CI/CD
      • How does Google design APIs?
      • Minishell (42 cursus)
      • Coroutine & Subroutine
      • Redis
Powered by GitBook
On this page
  • 1. 시스템 자원 분석
  • CPU 코어 수
  • 메모리 용량
  • 2. 작업의 특성 분석
  • I/O 바운드 vs CPU 바운드
  • 3. 스레드와 프로세스의 차이 이해
  • 스레드
  • 프로세스
  • 4. 서버 성능 테스트
  • 부하 테스트
  • 모니터링 및 조정
  1. Home
  2. Computer Science

Web server 를 구성할 때 Thread, Process 개수를 어떻게 정할 것인가?

CPU Bound, I/O Bound, Thread, Process, Web server

웹 서버를 만들 때 스레드 또는 프로세스의 개수를 정하는 것은 성능과 안정성에 중요한 영향을 미친다.

다음과 같은 몇 가지 고려사항을 통해 최적의 개수를 결정할 수 있다:

1. 시스템 자원 분석

CPU 코어 수

스레드 또는 프로세스의 개수는 시스템의 CPU 코어 수와 밀접한 관련이 있다.

일반적으로, CPU 바운드 작업의 경우 스레드 또는 프로세스의 개수를 CPU 코어 수와 비슷하게 설정하는 것이 좋다.

이는 컨텍스트 스위칭 오버헤드를 줄여 성능을 극대화할 수 있다.

메모리 용량

각 스레드 또는 프로세스가 사용할 메모리를 고려해야 한다.

메모리가 충분하지 않으면 스레드 또는 프로세스의 개수가 많아질수록 시스템 성능이 저하될 수 있다.

2. 작업의 특성 분석

I/O 바운드 vs CPU 바운드

웹 서버의 작업이 주로 I/O 바운드(파일 읽기/쓰기, 네트워크 요청)인지, CPU 바운드(데이터 처리, 계산 작업)인지 분석해야 한다.

I/O 바운드 작업의 경우 더 많은 스레드나 프로세스를 사용하여 동시에 여러 작업을 처리할 수 있다.

반면, CPU 바운드 작업의 경우 CPU 코어 수와 비슷한 개수를 설정하는 것이 더 효율적이다.

3. 스레드와 프로세스의 차이 이해

스레드

스레드는 동일한 프로세스 내에서 실행되므로 메모리를 공유한다.

컨텍스트 스위칭 오버헤드가 적지만, 동기화 문제가 발생할 수 있다. 스레드는 보통 경량 작업에 적합하다.

프로세스

프로세스는 독립된 메모리 공간을 갖기 때문에 안정성이 높지만, 컨텍스트 스위칭 오버헤드가 크다.

무거운 작업이나 안정성이 중요한 작업에 적합하다.

4. 서버 성능 테스트

위의 고려사항들을 통해서 설계를 한 뒤에는 테스트를 통해서 조정 및 검증을 하는 것이 좋을 것이다.

부하 테스트

실제 트래픽을 모방한 부하 테스트를 통해 다양한 스레드 및 프로세스 개수 설정에서의 성능을 측정한다. 이를 통해 최적의 설정을 찾을 수 있다.

모니터링 및 조정

서버 운영 중에도 지속적으로 모니터링하여 스레드 또는 프로세스의 개수를 조정할 수 있다. 이는 트래픽 패턴의 변화에 대응하여 성능을 유지하는 데 중요하다.

PreviousN+1 query in goNextCAP

Last updated 10 months ago

💻