| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 자바
- 스프링 핵심원리
- 알고리즘
- k8s
- 카카오
- 스프링핵심원리
- Kotlin
- 알고리즘정렬
- 김영한
- 함수형프로그래밍
- 예제로 배우는 스프링 입문
- 엘라스틱서치
- Effective Java 3
- Spring
- Sort
- 오블완
- ElasticSearch
- Effective Java
- java
- JavaScript
- 티스토리챌린지
- springboot
- kubernetes
- 이펙티브 자바
- 스프링
- 이펙티브자바
- 스프링부트
- effectivejava
- 클린아키텍처
- 자바스크립트
- Today
- Total
목록논블로킹 (2)
Kim-Baek 개발자 이야기
서버가 80%의 시간을 놀고 있었다Court Alarm API 서버의 모니터링 대시보드를 보고 있었다. 이상한 점이 있었다.CPU 사용률: 20%메모리 사용률: 40%응답 시간: 평균 2초동시 접속자: 500명리소스는 충분한데 응답이 느렸다. 뭔가 이상했다.스레드 덤프를 떠서 분석했다.jstack | grep "WAITING\|BLOCKED" | wc -l# 결과: 190 (전체 200 스레드 중)190개 스레드가 대기 중이었다! 무엇을 기다리고 있을까?"http-nio-8080-exec-42" #42 waiting on condition at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.rea..
서버가 10,000개 연결을 처리하는 방법Court Alarm이 성장하면서 동시 접속자가 급증했다. 처음엔 100명, 그 다음 1,000명, 그리고 어느 날 10,000명이 동시에 접속했다.서버가 버텨낼 수 있을까? 놀랍게도 서버는 문제없이 동작했다. CPU 사용률 40%, 메모리 사용률 60%. 여유가 있었다.어떻게 서버 한 대가 10,000개의 동시 연결을 처리할까?답은 운영체제의 네트워크 스택에 있었다. 운영체제는 네트워크 연결을 효율적으로 관리하는 정교한 메커니즘을 가지고 있다. 소켓, 버퍼, 인터럽트, I/O 다중화...5년 차가 되어서도 이 부분이 가장 어려웠다. 하지만 실제 성능 문제를 해결하면서 운영체제의 네트워크 처리를 제대로 이해하게 됐다.소켓(Socket)이란 무엇인가기본 개념소켓은 ..
