2019년 3월 26일 화요일

DBCP2, Tomcat 8 이후 JDBC 설정

tomcat8 부터 내부 DB Pool이 DBCP2 이다. 
인터넷에서 DBCP가 기본이라는곳도 있는데...
스텍을 보면 확인된다.   DBCP2다 

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532)

server.xml에 JDBC 등록 예 이다. 

<Resource 
    name="jdbc/dbaccess" 
    auth="Container" 
    type="javax.sql.DataSource"
      username="some_user" 
    password="{the password}" 
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://dbserver:3306/dbaccess?useFastDateParsing=false&amp;jdbcCompliantTruncation=false"
    maxTotal="500" 
    maxIdle="50"
    minIdle="50"
    initialSize="50"
    <!-- dbcp2, tomcat 8 부터 바뀜 getConnection후 대기시간 -->
    maxWaitMillis="5000"
    validationQuery="SELECT 1" 
    <!-- 가져올 때 체크 --> 
    testOnBorrow="false"
    <!-- eviction 체크 시간마다 Idle 체크 -->
    testWhileIdle="true"
    <!-- 반납할때 체크 -->
    testOnReturn="false"
    minEvictableIdleTimeMillis="30000" <!--이시간동안 사용안하면 제거 대상이 된다. -->
    numTestsPerEvictionRun="10" <!-- eviction시에 Pool을 lock을 잡고 이 수량만큼 체크 한다. 너무 적으면 전체 체크에 오래 걸리고 너무 길면 Pool이 lock되는 시간이 길어서 성능영향이 있을 수 있다. -->
    timeBetweenEvictionRunsMillis="30000" <!-- evction 주기를 설정한다. 이 주기와 한번에 점검하는수 그리고 전체 수의 상관관계를 잘 계산해야 F/W이 있는경우 안짤린다. -->
    <!-- SQL 수행시간을 제한 한다. connector의 timeout값과 맞추었다.
dbcp2, tomcat8 부터 removeAbandoned 가 두개로 분리 되었다 OnMaintenance는 앞서 Eviction시 Abandoned를 제거할지 지정한다. 
--> 
    removeAbandonedOnBorrow="true" 
    removeAbandonedOnMaintenance="true" 
     <!-- 20초 이상 돌고 있으면 잘라 -->
    removeAbandonedTimeout="20" 
    <!--제거내용이 로그로 남는다 초기에는 켜서 보다가 문제 없으면 꺼도 된다. 까끔 끊어진다고 크레임 있을 수 있으므로 켜놓고 운영하는게 좋다 -->
    logAbandoned="true"
   <!--SQL을 컴파일 하여 성능을 올리는 방법을 사용할지 선택한다. 대부분 문제 없지만 SQL이 동적으로 생성되는 일부  사이트의 경우 사용율이 떨어지고 Native mem 누수를 유발하기도 한다 문제 있으면 꺼보도록 하자 개선 사항이지 껐다고 장애 나지 않는다. --> 
    poolPreparedStatements="true"
    defaultTransactionIsolation="READ_COMMITTED"
  />


DB Pool이 꽉차면 Thread가 다 대기하는 상태가 되어 문제가 된다. 
아래 같은 메시지가 발생할 수 있다. 

All threads (512) are currently busy, waiting. Increase maxThreads (512) or check the servlet status

2019년 3월 12일 화요일

OpenJDK 선택하기



정말 오랜만에 약간은 공식적인(?) 블로그를 작성해 봤습니다.

흠......  원본을 검토하고 조정하고 wiki의 글을 워드프레스로 넘기다 보니 처음 의도했던것과 조금 다른곳도 있고 이상한 태그가 들어간곳도 있지만...

wiki 원본작성까지만 내 역할이고 나머지 부분은 다 도움받은것이라 딴지걸기도 미안하고...

여하간 대세에 지장없으니 그냥 읽으면 되겠다.




LINE의 OpenJDK 적용기: 호환성 확인부터 주의 사항까지


2018년 오라클의 라이선스 체계가 변경되면서 2019년 1월 이후 더 이상 무료로 Oracle JDK를 사용할 수 없게 되었습니다. 이에 LINE 내부에서는 사전에 OpenJDK를 적용하기 위해 필요한 사항이나 검토 항목을 정리하기 위하여 TF(task force)를 구성하였고, 진행된 내용과 사용된 기술적인 사항들을 정리하고자 이 글을 작성하게 되었습니다.
https://engineering.linecorp.com/ko/blog/line-open-jdk/






2019년 1월 30일 수요일

Google adsense, analytics 살리기

2012년

블로그스팟에 첫 블로그 페이지를 만들었다

유튜브 크리에이터도 이때 등록했고

사용량 확인을 위한 구글 애널리스틱

광고를 위한 구글 에드센스도 이때 가입하였다.

이후에 시간이 흘러 흘러 어느 날 부터  블로그에는 광고가 나오지 않았고

작년인가? 국내 유튜버 열풍으로 유튜브가 배가 불렀는지

나같은 비성실(?) 사용자는 크리에이터에서 방출 당하게 되었다

그냥 궁금했고(애널리스트와 에드센스를 공부하려고 시작한게 여기까지 왔다) 

광고도 다는 방법만 알면 됬기에 수익에 신경쓰지 않았다

근데 얼마전 업데이트 메일이 왔길래 에드센스에 들어가 봤더니 18$의 예치금이 있었다.  (100$ 부터 현금으로 지급 받을 수 있다)

경고창에는 PIN 코드 입력을 안해서 광고가 차단 됬단다....

중간에 정책이 바뀌었는데 내가 따라가지 않았거나 10$이상이 되면 PIN 발급이 되는데

그 PIN을 하두 오래 등록을 안해서 해지가 된 것 일 수도 있다

다른건 모르겠고  요즘 하도 비수기라서 에드센스와 애널리스틱을 살려보기로 하고

여기저기 연결을 하고 PIN 재발급 신청도 했다


PIN이 우편으로 오기 전에는 (짧으면 2주 길면 4주 걸린다는데...) 에드센스는 더 해볼께 없고

애널리스틱을 열어보니 몇일 사이에 데이터가 쌓여있었다...

올....내 블로그를 하루에 60명이나 들어온단 말야?  깜놀

인기 있는 글은 JVM관련한 글과 Timeout 그리고 카렌스수리 글이 되시겠다

여기서 Timeout은 내 글이 아니라 전전 회사 동료가 작성한거 올린건데....

매번 술마시면 업데이트 하겠다고 말만 하고 한 5년 되간다 ㅋㅋㅋ

PIN 등록하면 광고 한번 다시 넣어보고 100$ 넘으면 지급 한번 받아봐야겠다


이렇게 또  "내가 구글 에드센스로 돈도 벌어본 사람이야!" 라고 잘 난 척 할 꺼리를 하나 만들어볼까 한다.

2019년 1월 17일 목요일

스킬치기


RPG 에서 케 고르고  전직을 뭘로 할까 하는 고민을 하다가
스킬 포인트로 스킬을 치려고 들어가면
젠장....뭐가 이리 많아....


이걸 하나하나 해 보는건 개발자의 마수에 걸려드는 것이겠고
인벤에 기생하는 잉여들이 온몸으로 테스트하고 경험한 스킬셋을 찍고
뿌듯한 마음으로 몹을 때리고 다니다 보면
이 개같은 개발자들이 패치를 하면서 갑자기 밸런스 조정을 하면서
안그래도 같은 타입의 캐릭이 잔뜩 있는 내 캐릭이 개허접 떡락 캐릭이 되버리고 만다
아....
현질로 초기화 하고 다시 찍을라 쳐도....이번에는 뭘 로 해야 하나....
전직을 뭘로 할지  스킬을 어떻게 칠지....
또 인벤에 기대어 본다....

살면서
고딩에서 대학갈때
학교졸업 회사갈때
회사에서 이직할때

요즘 뜬다고

돈 많이 벌 수 있을 것 같은 직업 직종을 골라 들어간다

그리고 그 일에 익숙해 질 때 쯤 이면

그 직종은 지고 새로운 직종이 떠오른다

고민에 빠지고....

더러워서 다니기 싫은 회사 때려 치고 직종을 변경해 버리는 불상사

그리고 그 일에 다시 익숙해 질 때 쯤 이면

그 직종은 지고 새로운 직종이 떠오른다

무한 반복의 뫼비우스의 띠를 벗어 나지 못하는 삶

어서와 현실 세계는 처음이지?


자신만의 시각으로

자기가 원하는 것을 하기란 쉬운 일이 아니다

튼튼한 멘탈과

건강한 가빠가 있어야 한다

나이 들어 피지컬이 부족한 인간이 젊은 친구랑 경쟁해서 살아 남겠다는 생각은 정말 엔지니어스러운 상상이다

노하우와 요령이 찌질함으로 평가 받는 시대라고 해도

시간이 지나도 변하지 않는 원칙 이라는게 있다

모든 외부적 평가와 트렌드는 반복 과 순환의 과정을 거치고 결국은 원칙으로 회기 한다 (튜닝의 끝은 순정이다)


어떻게 해야 나의 삶을 살 수 있는가

책을 읽고 개꼰대의 말을 아무리 들어보라 알 수 있다면 그건 배워서 그런게 아니라

내가 선대로 부터 받은 변하지 않는 "기질"이 시대와 환경에 맞아서 운이 좋은것이 아닐까


RPG 캐릭의 종류에 따른 기본 스텟이 있고 발동 스킬과 패시브 스킬도 있다

뭘 어떻게 잘 할지 고민해 봐야 시간만 흐른다  함 눌러바바 (호갱님 고민은 배송을 늦출 뿐입니다.)


스킬을 잘 쳐라

개쓰레기 캐릭 만들지 말고 .....

2018년 12월 27일 목요일

dotnet core Hello world

ttps://docs.microsoft.com/ko-kr/dotnet/core/linux-prerequisites?tabs=netcore2x

1. 설치  (CentOS 7.5 에서)
dotnet core 2.2 설치
https://docs.microsoft.com/ko-kr/dotnet/core/linux-prerequisites?tabs=netcore2x

다운로드
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm  (리포추가)
sudo yum update  (일단 OS 몽땅 업데이트)
sudo yum install dotnet-sdk-2.2


2. Helloword를 찍어보자

#mkdir /home/www/dotnet/helloworld
#cd /home/www/dotnet/helloworld
[www@dot-netcore-001-talk-svc-jp2v-dev helloworld]$ dotnet new console

Welcome to .NET Core!
---------------------
Learn more about .NET Core: https://aka.ms/dotnet-docs
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli-docs

Telemetry
---------
The .NET Core tools collect usage data in order to help us improve your experience. The data is anonymous and doesn't include command-line arguments. The data is collected by Microsoft and shared with the community. You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.

Read more about .NET Core CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only). For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
Getting ready...
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on /home1/www/dotnet/helloworld/helloworld.csproj...
  Restoring packages for /home1/www/dotnet/helloworld/helloworld.csproj...
  Generating MSBuild file /home1/www/dotnet/helloworld/obj/helloworld.csproj.nuget.g.props.
  Generating MSBuild file /home1/www/dotnet/helloworld/obj/helloworld.csproj.nuget.g.targets.
  Restore completed in 407.77 ms for /home1/www/dotnet/helloworld/helloworld.csproj.

Restore succeeded.


[www@dot-netcore-001-talk-svc-jp2v-dev helloworld]$ dotnet run
Hello World!

or

[www@dot-netcore-001-talk-svc-jp2v-dev helloworld]$ dotnet ./bin/Debug/netcoreapp2.2/helloworld.dll
Hello World!


수정 후 빌드만 다시하기

[www@dot-netcore-001-talk-svc-jp2v-dev calc]$ dotnet build
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 54.51 ms for /home1/www/dotnet/calc/calc.csproj.
  calc -> /home1/www/dotnet/calc/bin/Debug/netcoreapp2.2/calc.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:02.22


Process 모냥

[www@dot-netcore-001-talk-svc-jp2v-dev ~]$ ps -ef | grep dotnet
www       91284      1  0 14:01 pts/0    00:00:03 /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.100/Roslyn/bincore/VBCSCompiler.dll -pipename:www.F.4YVjXIkKKf73NaMTt+z4fEXoz
www       93060  90767  1 14:13 pts/0    00:00:00 dotnet run -- kwon
www       93098  93060  0 14:13 pts/0    00:00:00 dotnet exec /home1/www/dotnet/calc/bin/Debug/netcoreapp2.2/calc.dll kwon




high cpu 찾기
top -H -c -b -n1

동작중인 내용잡기
strace -p pid

stack 추출
pstack $pid (high cpu pid)