반응형

 

※ 개요: 서버를 운영하다보면 속도가 느려지는 등의 이유로 서버 모니터링에 대한 관심을 가져야할 때가 있다. VisualVM이 입문자가 사용하기에 괜찮은 프로그램인데 초기 설정에 애를 많이 먹었다... 겨우 성공하여서 나중에 삽질을 덜하기 위하여 적어논다.

 

※ 환경:

   - CentOS Linux release .7.1908 (Core)

   - apache-tomcat-8.5.50

   - VisualVM 2.1.7

 

※ catalina-jmx-remote.jar 파일 다운로드 명령어

   - 톰캣/lib 하위에 위치시킨다.

wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-8/v8.0.45/bin/extras/catalina-jmx-remote.jar

 

catalina.sh 옵션 추가 방법

   - 입력 내용중 -Dcom 부분을 보기 좋게 한다고 엔터를 쳐서 입력하면 오류가 발생한다. 그냥 복사해서 사용하자..)

   - 인터넷에서 찾아보면 setenv.sh 파일만 입력하거나 setenv.sh와 sever.xml을 수정하는 방법 2가지가 나오는데 나는 두번째만 되서 두번째 방법을 기록한다.

#setenv.sh
#파일 권한체크도 중요 -rwxr-x---

JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.s
erver.hostname=서버주소 -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS $JMX_OPTS -Djava.security.egd=file:/dev/./urandom -Xms8192m -Xmx8192m"

 

server.xml 파일 수정

<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
        rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841" />

   - SHUTDOWN 아래에 내용을 추가한다. 9840, 9841 포트는 당연히 방화벽 예외에 추가되어야 한다.

   - 수정이 완료되면 톰캣 재기동 !

 

접속 테스트

   1. 처음은 JConsole 로 접속이 되는지 테스트 해본다. Remote Process 체크 후 IP주소: 포트(위의 예시 9840) 입력 후 Connect

   2. JConsole이 정상적으로 접속되면 VisualVM 접속을 시도한다. Remote에 IP가 추가되었으면 아이피 우측 선택 후 Add JMX Connection 클릭 후 IP주소와 포트(위의 예시 9840)를 입력하고 Connect 하면 정상적으로 연결된다.

 

도움을 받은 곳

https://infotake.tistory.com/87

 

[Tomcat] 톰캣 자원 모니터링 - JMX

촌놈입니다! 앞서서 JConsole을 이용한 로컬 JDK 자원 모니터링(profiling) 을 해보았는데요 이번에는 JMX라는 확장 라이브러리를 이용 JConsole, VisualVM 기반으로 톰캣에 대한 자원내역을 분석 해보는 방

infotake.tistory.com

 

반응형

'WAS' 카테고리의 다른 글

Resin 레진 500 Servlet Exception 해결  (0) 2017.09.19
반응형

ECMAScript 2024

웹개발 시 유효성 검사 등으로 Object Array의 중복값을 알아내서 사용자에게 경고해주는 기능을 만드는 경우가 있다.

이를 예시로 만든 자바스크립트 코드이다.

let arr = [
	{
    	year: '2024', 
    	name: '가철수'
	},
	{
    	year: '2024', 
    	name: '나철수'
	},
	{
    	year: '2024', 
    	name: '다철수'
	},
	{
    	year: '2024', 
    	name: '다철수'
	},
	{
    	year: '2024', 
    	name: '라철수'
	}
];

let dup = [];
let check = arr.reduce((acc, cur) => {
	if (objFound = acc.find(accItem => accItem.year === cur.year && accItem.name === cur.name)) {
		dup.push(cur);
	}
	else {
		acc.push(cur);
	}
	return acc;
}, []);
     
// console.log("check: ", check);
console.log("dup:", dup);   // {year: '2024', name: '다철수'}

개선하는 방법이 있으면 댓글 부탁드립니다..

reduce.. find.. filter.. map.. set..

공부를 더 열심히 하자..... ㅜㅜ

 

도움을 받은 곳..

https://stackoverflow.com/questions/58754685/find-duplicate-objects-in-array-and-return-new-array-of-object-with-number-of-du

반응형
반응형

오라클 19c

 

삽질

 

오랜만에 오라클을 설치 해보았다.

노트북에 centos 7을 설치하고 오라클 19c 스탠다드를 설치하였다. 오랜만에 설치해보니 역시나 삽질을 너무 많이 했다.

만약 이러저러한 이유로 삽질을 하고 계신분이 이글을 보고 계신다면 잠시 휴식을 취하고 머릿속을 비우고 하나 하나 짚어보셔서 해결되는 마음으로 글을 작성한다.

 

1. 원격으로 접속해서 설치할 것인지 서버에서 직접 설치할 것인지.. 알아야될 키워드는 x11과 xhost +

2. oracle 계정으로 접속 시 bash 쉘이 정상적으로 동작중인지 확인하자(오라클 설치 디렉토리 권한 체크는 덤~)

3. oracle_home과 oracle_base를 나도 모르게 이상한 위치에 설치했을 수도 있다.

4. 환경설정도 잊지 말자 ! more ~/.bash_profile

5. oracle_home/network/admin 위치의 listener.ora, tnsnames.ora IP주소도 설정해야 해요~

6. 방화벽은 selinux는 ??

7. 오라클 서비스는 당연히 실행했겠죠? sqlplus "/as sysdba" startup lsnrctl start .....

8. 오라클 접속 계정 만들기 ~ create, grant

9. 자 이정도만 체크해도 오라클 설치 후 접속은 OK~!

반응형
반응형

* 환경 : Rocky Linux release 8.8 (Green Obsidian)

* 개요 : 디렉토리를 백업하는 경우 해당 디렉토리 내부에 있는 특정 디렉토리를 제외하고 tar.gz 압축을 하는데 에러가 발생함.

* 에러메시지 : 

tar: The following options were used after any non-optional arguments in archive create or update mode.  These options are positional and affect only arguments that follow them.  Please, rearrange them properly.
tar: --exclude `./test/result' has no effect
tar: 앞서 발생한 오류로 실패 코드를 반환하며 빠져나감

* 해결책 : 

예를 들어서

tmp/test
tmp/test/a.txt
tmp/test/result
tmp/test/result/b.txt

위와 같이 디렉토리와 파일이 있는데 test라는 디렉토리를 압축하고 result 라는 디렉토리를 제외하고 싶은 경우 아래와 같이 명령어를 구성한다.

tar -zcvf test.tar.gz --exclude="result" test/
tar -zcvf test.tar.gz --exclude="apple/result/" test/   // 제외하려는 디렉토리가 2depth 인 경우
tar -zcvf test.tar.gz --exclude="apple/result/" --exclude="apple/recruit/" test/   // 제외하려는 디렉토리가 2개인 경우

록키 리눅스의 경우 압축하려는 디렉토리 위치가 맨 뒤로 와야되고 --exclude 명령어에 절대 경로를 사용하지 말고 압축하려는 디렉토리 내부의 제외하려는 디렉토리 경로만 정확하게 적어주면 된다.

리눅스가 계속 버전이 바뀌다 보니 centos 기준의 글들의 정보가 정확하지 않은 경우가 많은 것 같다...

* 도움을 받은 곳 : https://www.nodinrogers.com/post/2022-01-15-excluding-files-from-a-tar-archive/

 

Excluding files from a tar archive

I was trying to make a backup, but exclude my working directory, which just has a lot of temp files in it. . . . easier said than done . . . The concept is …

www.nodinrogers.com

 

반응형
반응형

Apache POI

 * 개요 : 실무에서 엑셀저장 기능을 사용하는 경우 금액이 입력되어야 하는 경우가 있다. 이 때에 가독성이 좋도록 천의 자리 마다 콤바를 추가하는데 아래 방법을 참고한다.

 

* 방법

CellStyle cs = workbook.createCellStyle();
DataFormat df = workbook.createDataFormat();
cs.setDataFormat(df.getFormat("#,##0"));
...
row.getCell(0).setCellStyle(cs);   // 본인의 환경에 맞춰서 스타일을 적용한다

 

 * 도움을 받은 곳

java - Apache POI changing cell format from dot to comma - Stack Overflow

 

Apache POI changing cell format from dot to comma

I'm using Apache POI to generate excel files. I'm trying to format my cells to display no decimal cases and use dot as the thousand separator. (187103,915 -> 187.103). If I apply the format #.##0

stackoverflow.com

 

반응형
반응형

* 실무에서 부모 창에서 팝업을 구현할 때에 대량의 배열 데이터를 자식 창으로 전달하는 경우가 종종있다.

* 비슷비슷해서 헷갈리다 보니 시간 낭비가 너무 심해서 기록해둔다.

<부모창>

<input id="devsim01" type="hidden">

$("#devsim01").val(JSON.stringify(배열));

 

<자식창>

let json_child = opener.document.getElementById("devsim01").value;
let data = JSON.parse(json_child);

console.log(data);

#배열이 출력되겠죠?
반응형
반응형

* 개요 : 웹개발 시 보통 문자나 특수문자를 치환하는 경우 자바스크립트 정규식을 사용한다.

* 설명 : 정규식 형식에는 리터럴 표기법과 RegExp 함수의 생성자 함수를 사용하는 방법이 있는데 생성자 함수를 사용하면 동적으로 변하는 변수를 정규식으로 사용할 수 있다.

* 해결법 :

let arr = ['a', 'b'];

let reg;

let exp;

let str = 'abc';

// for문 내부에서

reg = `[^${arr[i]}` + ${arr[j]}]';

exp = new RegExp(reg, "gi");

str = str.replace(exp, '');

핵심은 키보드 느낌표(!) 왼쪽에 있는 ` 문자와 달러 + 중괄호 사용이다. 테스트 해보고 이해하고 사용해본다.

 

* 도움을 받은 곳 :

https://leeseong010.tistory.com/142

 

[JavaScript] 정규 표현식 안에 동적으로 변수를 넣는 방법

정규 표현식(Regular Expression)은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다. RegExp RegExp 생성자는 패턴을 사용해 텍스트를 판별할 때 사용한다. 리터럴 표기법의 매개변수는 두 빗금으로 감

leeseong010.tistory.com

 

반응형
반응형

 

⊙ 개요 : 내가 가진 ASUS A52F 라는 오래전에 구입한 노트북이 있다. 여기에 록키 리눅스를 설치하기 위해 CENTOS 8을 설치하려고 하는데 네트워크 장치중 이더넷을 찾을 수가 없었다... 인터넷이 되어야 rpm이든 dnf든 작업을 할텐데.. 상당히 난감한 상황이다... 검색을 해봐도 도통 잘 나오지를 않는다. 이 문제는 예전에도 엄청 삽질을 하면서 해결을 했었는데 몇 개월 지나고 까먹고 또 삽질을 하고있었다..

⊙ 원인 : CENTOS 8에서 노트북 네트워크 카드(JMicron(R) JMC250 PCI-E Ethernet Adapter)의 장치가 너무 오래되서 자동 설치를 지원해주지 못해서 일어난 문제이다.

⊙ 해결방법 : 

1. CENTOS 8 설치 시 10GB 짜리 USB로 ISO 파일을 준비 후 서버-GUI로 설치한다.

2. 서버-GUI로 설치하면 WIFI를 바로 사용할 수 있을 것이다.

3. 인터넷이 되는 윈도우 PC로 윈도우의 3DP 같은 ELREPO (http://elrepo.org/tiki/HomePage) 사이트에 접속한다. Download -> Asia-Pacific -> 아무 주소에 접속해도 되고 /elrepo/elrepo/el8/x86_64/RPMS/ 요 순서대로 마우스로 클릭하면 rpm 목록을 확인 할 수 있다. -> elrepo.noarch 문구로 검색해보면 2023년 4월 20일 기준(글을 다 작성하고 보니 그냥 WIFI 연결 상태에서 직접 파일들을 받아도 된다 -0-;;)

elrepo-release-8.0-2.el8.elrepo.noarch.rpm
elrepo-release-8.1-1.el8.elrepo.noarch.rpm
elrepo-release-8.2-1.el8.elrepo.noarch.rpm
elrepo-release-8.3-1.el8.elrepo.noarch.rpm

4개를 확인 할 수 있는데 가장 최신인 elrepo-release-8.3-1.el8.elrepo.noarch.rpm 파일을 다운로드 후에 centos를 설치한 USB에 본인만의 디렉토리를 생성하고 위에서 다운 받은 파일을 복사한다.

4. CENTOS에 USB를 다시 장착하고 findmnt 명령어를 이용해서 마운트 정보를 확인 후 본인이 편한 디렉토리에 받은 파일을 복사한다.(만약 5번에서 뭔가 문제가 발생하면 네트워크 카드와 관련된 파일도 복사한다. 본인의 경우 /elrepo/archive/elrepo/el8/x86_64/RPMS 경로의 kmod-jme-1.0.8-1.el8_2.elrepo.x86_64.rpm 파일, 본인 PC의 네트워크 카드 정보를 확인 후 찾아본다)

5. root로 쉘을 변경 후에

// ELREPO 활성화
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
dnf -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

// 커널 설치
sudo dnf --enablerepo=elrepo-kernel install kernel-ml kernel-ml-{devel,headers}

// 재기동
reboot

명령어로 커널을 업데이트 한다. 4번을 빼먹으면 오류가 날 것이다.

6. 이더넷 활성화 하기 위해 다음 명령어를 입력한다.

nmcli dev status
// or
nmcli con show
// 명령어를 사용하여 이더넷 nic의 DEVICE 명을 파악한다. 본인의 경우 ens5f5 였다.

nmcli con add con-name eth0 type ethernet ifname ens5f5
// eth0은 내마음대로 작명한 것이다.
// 위에서 알아낸 장치의 ens5f5와 동일한 것을 확인 할 수 있다.

nmcli con up eth0
// 드디어 장치를 활성화 시킨다.

7. 위 설정을 완료하면 잠시 bash가 먹통이 될 것이다. 잠시 기다리다가 X 윈도우 설정 네트워크에 들어가면 앞서 보이지 않았던 [유선] 항목이 보일 것이다. 톱니바퀴를 클릭 후 본인 IP및 기타 정보를 입력하고 끔 -> 켬 하면 드디어 인터넷에 연결된 것을 확인 할 수 있다.

애필로그 : 완전히 같은 환경은 아니겠지만 나와 비슷한 문제를 만나는 분들에게 조금이라도 도움이 되었으면 좋겠다.. 벌써 이 문제로 몇번이나 삽질을 하는건지...

 

※ 도움을 받은 곳 :

https://www.mail-archive.com/elrepo@lists.elrepo.org/msg04138.html

 

Re: [elrepo] kmod-jme for el8 (x86_64)

Many thanks Phil. Downloaded, installed and working as expected. Perfect! Appreciate your help on this and all the work on this repo. Regards, Richard On Tue, 29 Sep 2020, 17:00 , wrote: > Send elrepo mailing list submissions to > elrepo@lists.elrepo.org >

www.mail-archive.com

https://blog.kerus.net/2328/centos-8-install-latest-kernel/

 

CentOS 8 최신버전 커널 설치

(Last Updated On: November 29, 2020)CentOS 8 에서 elrepo repository를 통한 최신버전 커널 설치  1 Enable ELREPO 2 INSTALL MAINLINE KERNEL 3 REBOOT Reference https://computingforgeeks.com/how-to-install-latest-kernel-on-centos-linux/ More from

blog.kerus.net

https://flightsim.tistory.com/154

 

[Linux, CentOS] CentOS 8 네트워크 관리 명령어, nmcli

현재 CentOS 공식 홈페이지(https://centos.org/) 에 따르면 최적화 버젼은 매뉴얼화된 CentOS 7.8.2003과 CentOS 8.0.1905 이고 최신 버젼은 CentOS 8.2.2004 이다. RHEL 8 버전 부터는 service network restart 와 systemctl restar

flightsim.tistory.com

 

반응형
반응형

<맥주마시는 젠킨스>

* 오류 메시지 : 

   [ERROR] no suitable constructor found for
   [ERROR] (actual and formal argument lists differ in length)

* 환경 : 스프링 4.0 , 자바 1.8, 젠킨스 Jenkins 2.346.1, SVN

* 원인 : 프로젝트에서 jar 라이브러리등을 변경할 때에 pom등에서 버젼을 정상적으로 올리는 것이 아닌 이름은 동일하게 하고 파일만 바꾸면 젠킨스에서 빌드 시 실제 jar 파일의 크기가 맞지 않아서 발생하는 문제

* 해결법 : 문제가 되는 라이브러리 파일은 교체하고 이름은 그대로 사용하지 않고 파일명으로 버전업을 시킨다.

외부 라이브러리를 pom에 등록하는 방법은 https://devesim.tistory.com/116 게시글을 참고한다.

* 독백 : 젠킨스 관련된 한글 정보가 너무 없어서 올렸습니다..........

반응형
반응형

웹서핑을 하다가 한빛출판네트워크를 알게 되었고 IT 관련 도서를 구매하고 이벤트에 참여하는 등 한빛출판네트워크 사이트에 종종 접속하게 되었다.

그러던 중 혼공학습단 이라는 활동을 알게 되었다. 도서를 구매하고 해당 커리큘럼 과정에 맡게 스스로 학습하고 학습 결과를 개인 운영 SNS나 블로그 등에 올리는 이벤트이다.... 개인은 혼자 학습을 하고 출판사는 PR을 하는 등 서로 win-win 하는 과정이다....

아무튼 주력이 웹개발이다 보니 개인 업무에 내가 개인적으로 부족한 부분을 보완하는 중이어서 이 혼공 학습이라는 것에 실제로 집중해서 학습할 여력은 많이 부족했다...

돌이켜보면 역시 우려대로 조금 더 많이 곱씹고 테스트 해보고 유튜브 강의도 보고 했어야 했는데 속독으로 읽고 미션 완료하기 급급했던 것 같다.

비록 혼공 9기 활동은 오늘로 끝이났지만 혼자공부하는 데이터 분석은 나중에 시간을 내서 다시 공부를 하고 저자의 강의도 꼼꼼하게 볼 예정이다.

다음에 내가 흥미가 가는 분야가 생기고 그게 혼공학습과정에 포함이 되어 있으면 이번보다는 시간을 더 내서 잘 과정을 마쳐보고 싶다. 열심히해서 받는 상품권이 중요한게 아니라 내가 스스로 학습하는 습관을 만들고 더 나아가서 무엇인가에 관해서 지식을 습득한다, 안다는 것이 결코 녹록치 않은 것인데 그것을 제대로 잘 하면 스스로 뿌듯할 것 같다...

이상 회고 끝.......

반응형

+ Recent posts