이 기사에서는 Java에서 JVM 명령을 사용하여 서버 문제를 해결하는 방법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1. top(Linux 명령)
top 명령 실행: (아래에서 사용된 프로세스 15477의 세부 정보 보기)
시스템 정보(처음 5줄):
라인 1: 상위 작업 대기열 정보(시스템 실행 상태 및 평균 부하). uptime 명령 결과와 동일합니다.
평균 시스템 로드: 단일 코어 CPU의 경우 0.00은 로드 없음을 의미하고, 1.00은 전체 로드를 의미하며, 1개 이상의 면은 과부하를 의미하며, 이상적인 값은
멀티 코어입니다. CPU 로드: CPU 코어 수 * 이상적인 값 0.7 = 이상적인 로드, 예: 4코어 CPU 로드는 2.8을 초과하지 않습니다. 이는 높은 로드가 없음을 의미합니다.
형식: 최대 xx일, HH:MM
예: 241일, 20:11은 241일 20시간 11분 동안 지속적으로 실행되었음을 의미합니다
단락 1: 시스템 현재 시간, 예: 16:07:37
단락 2: 시스템 실행 시간, 다시 시작하기 전의 시간 시간이 길수록 시스템이 더 안정적입니다.
단락 3: 현재 로그인된 사용자 수, 예: 1 user, 현재 로그인한 사용자는 1명임을 나타냅니다.
단락 4: 시스템 로드, 즉 평균 길이 작업 대기열, 3가지 값은 최근에 계산됩니다. 1, 5, 15분 동안의 시스템 부하 평균
2행: 작업 프로세스 관련 정보
단락 1: 총 프로세스 수, 예: 작업: 총 231개, 실행 중인 총 231개의 프로세스를 나타냅니다.
단락 2: 실행 중인 프로세스 수, 예: 실행 중인 1개,
단락 3: 휴면 프로세스 수, 예: 230 Sleeping,
4단락: 중지된 프로세스 수, 예: 0 중지됨,
단락 5: 좀비 프로세스 수, 예: 0 Zombie
라인 3: Cpus CPU 관련 정보 멀티 코어 CPU인 경우 숫자 1을 누르면 각 코어의 CPU 정보가 표시됩니다. 이때 1번 줄은 CPU 코어 번호 줄로 변환되며 1번 줄은 앞뒤로 전환될 수 있습니다. .
단락 1:
us
사용자 공간 점유 CPU 백분율us
用户空间占用CPU百分比,例如:Cpu(s): 12.7%us,第2段:
sy
内核空间占用CPU百分比,例如:8.4%sy,第3段:
ni
用户进程空间内改变过优先级的进程占用CPU百分比,例如:0.0%ni,第4段:
id
空闲CPU百分比,例如:77.1%id,第5段:
wa
等待输入输出的CPU时间百分比,例如:0.0%wa,第6段:
hi
CPU服务于硬件中断所耗费的时间总额,例如:0.0%hi,第7段:
si
CPU服务软中断所耗费的时间总额,例如:1.8%si,第8段:
st
Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)第4行:Mem 内存相关信息(Mem: 12196436k total, 12056552k used, 139884k free, 64564k buffers)
第1段:物理内存总量,例如:Mem: 12196436k total,
第2段:使用的物理内存总量,例如:12056552k used,
第3段:空闲内存总量,例如:Mem: 139884k free,
第4段:用作内核缓存的内存量,例如:64564k buffers
第5行:Swap 交换分区相关信息(Swap: 2097144k total, 151016k used, 1946128k free, 3120236k cached)
第1段:交换区总量,例如:Swap: 2097144k total,
第2段:使用的交换区总量,例如:151016k used,
第3段:空闲交换区总量,例如:1946128k free,
第4段:缓冲的交换区总量,3120236k cached
进程信息:
在top命令中按f按可以查看显示的列信息,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。带*号的是默认列。
A:
PID
= (Process Id) 进程Id;-
E:
🎜🎜🎜단락 2: sy 커널 공간이 차지하는 CPU 비율(예: 8.4%sy,🎜🎜🎜🎜3단락:USER
, 예: Cpu(s): 12.7%us,ni
우선순위가 변경된 프로세스가 차지하는 CPU 비율) 사용자 프로세스 공간에서, 예: 0.0%ni,🎜🎜🎜🎜단락 4:id
유휴 CPU 비율, 예: 77.1%id,🎜🎜🎜🎜단락 5:wa
입력 대기 중 CPU 시간 백분율을 출력합니다. 예: 0.0% wa, 🎜🎜🎜🎜 단락 6:hi
CPU가 하드웨어 인터럽트를 처리하는 데 소비한 총 시간, 예: 0.0 % hi, 🎜🎜🎜🎜 단락 7:si
CPU 서비스 소프트 인터럽트에 소요된 총 시간입니다. 예: 1.8%si,🎜🎜🎜🎜단락 8:st
Steal time 하이퍼바이저가 가상 머신을 훔쳤습니다. 소비된 CPU 시간(VM이 현재 하이퍼바이저에 있는 경우 하이퍼바이저는 실제로 CPU 처리 시간의 일부를 소비합니다.) 🎜🎜🎜🎜🎜라인 4: 🎜🎜Mem 메모리 관련 정보 🎜 (Mem: 총 12196436k, 사용된 12056552k, 사용 가능한 139884k, 버퍼 64564k) 🎜🎜🎜🎜🎜🎜단락 1: 총 물리적 메모리, 예: Mem: 총 12196436k,🎜🎜🎜 🎜2항: 총 금액 사용된 물리적 메모리의 양, 예: 12056552k 사용됨,🎜🎜🎜🎜페이지 3: 사용 가능한 총 메모리 양, 예: Mem: 139884k free,🎜🎜🎜🎜페이지 4: 커널 캐시로 사용된 메모리 양, 예: 64564k 버퍼🎜🎜🎜🎜🎜페이지 5 행: 스왑 파티션 관련 정보 스왑(스왑: 총 2097144k, 151016k 사용, 1946128k 무료, 3120236k 캐시) 🎜🎜🎜🎜🎜🎜단락 1: p 영역 총계, 예: 스왑 : 총 2097144k,🎜🎜🎜 🎜No.2 세그먼트: 사용된 스왑 영역의 총량, 예: 151016k 사용,🎜🎜🎜🎜세그먼트 3: 프리 스왑 영역의 총량, 예: 1946128k free,🎜🎜🎜🎜 세그먼트 4: 버퍼링된 스왑 영역의 총량, 3120236k 캐시됨 🎜🎜🎜🎜🎜🎜 🎜프로세스 정보: 🎜🎜🎜 상단 명령에서 f를 누르면 표시된 열 정보를 볼 수 있고, 해당 문자를 누르면 열을 켜거나 끌 수 있습니다. . 대문자는 켜짐을 의미하고, 소문자는 꺼짐을 의미합니다. *로 표시된 열은 기본 열입니다. 🎜🎜🎜🎜🎜🎜🎜A:PID
= (프로세스 ID) 프로세스 ID 🎜🎜🎜🎜🎜E:USER
= (사용자 이름) 프로세스 소유자의 사용자 이름 🎜 H:
PR
= (우선순위) 우선순위PR
= (Priority) 优先级I:
NI
= (Nice value) nice值。负值表示高优先级,正值表示低优先级O:
VIRT
= (Virtual Image (kb)) 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESQ:
RES
= (Resident size (kb)) 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATAT:
SHR
= (Shared Mem size (kb)) 共享内存大小,单位kbW:
S
= (Process Status) 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程K:
%CPU
= (CPU usage) 上次更新到现在的CPU时间占用百分比N:
%MEM
= (Memory usage (RES)) 进程使用的物理内存百分比M:
TIME
+ = (CPU Time, hundredths) 进程使用的CPU时间总计,单位1/100秒
b:PPID
= (Parent Process Pid) 父进程Id
c:RUSER
= (Real user name)
d:UID
= (User Id) 进程所有者的用户id
f:GROUP
= (Group Name) 进程所有者的组名
g:TTY
= (Controlling Tty) 启动进程的终端名。不是从终端启动的进程则显示为 ?
j:P
= (Last used cpu (SMP)) 最后使用的CPU,仅在多CPU环境下有意义
p:SWAP
= (Swapped size (kb)) 进程使用的虚拟内存中,被换出的大小,单位kb
l:TIME
= (CPU Time) 进程使用的CPU时间总计,单位秒
r:CODE
= (Code size (kb)) 可执行代码占用的物理内存大小,单位kb
s:DATA
= (Data+Stack size (kb)) 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
u:nFLT
= (Page Fault count) 页面错误次数
v:nDRT
= (Dirty Pages count) 最后一次写入到现在,被修改过的页面数
y:WCHAN
= (Sleeping in Function) 若该进程在睡眠,则显示睡眠中的系统函数名
z:Flags
= (Task Flags) 任务标志,参考 sched.h X:
COMMAND
NI
= (좋은 값) 좋은 값입니다. 음수 값은 높은 우선 순위를 나타내고, 양수 값은 낮은 우선 순위를 나타냅니다O: VIRT
= (가상 이미지(kb)) 프로세스에서 사용하는 총 가상 메모리 양, 유닛 kb . VIRT=SWAP+RES
Q: RES
= (상주 크기(kb)) 프로세스에서 사용하고 스왑 아웃
SHR
= (공유 메모리 크기(kb)) 공유 메모리 크기, 단위 kb
W: S
= ( 프로세스 상태) 프로세스 상태입니다. D=무중단 절전 상태, R=실행 중, S=절전, T=추적/중지, Z=좀비 프로세스
K:
%CPU
= (CPU 사용량) 마지막 업데이트 현재 CPU 시간 사용량 백분율
%MEM
= (메모리 사용량(RES)) 프로세스에서 사용하는 물리적 메모리의 백분율M: TIME+ = (CPU 시간, 100분의 1) 프로세스에서 사용한 총 CPU 시간, 단위 1/100초
b:
PPID
= (상위 프로세스 Pid) 상위 프로세스 Id c:
RUSER
= (실제 사용자 이름) d:
UID
= (사용자 ID) 프로세스 소유자의 사용자 ID f :
GROUP
= (그룹 이름) 프로세스 소유자의 그룹 이름 g:
TTY
= (Tty 제어) 프로세스를 시작한 터미널의 이름 . 터미널에서 시작되지 않은 프로세스는 다음과 같이 표시됩니다. j:
P
= (마지막으로 사용한 CPU(SMP)) 마지막으로 사용한 CPU는 다중 CPU 환경에서만 의미가 있습니다. p:
SWAP
= (스왑된 크기(kb)) 스왑 아웃된 프로세스에서 사용하는 가상 메모리의 크기(kb) l:
TIME
= (CPU 시간) 프로세스에서 사용한 총 CPU 시간(초) r:
CODE
= (코드 크기(kb)) 실행 코드가 차지하는 물리적 메모리 크기 , kb s:
DATA
= (데이터+스택 크기(kb)) 실행 코드 이외의 부분(데이터 세그먼트 + 스택)이 차지하는 물리적 메모리 크기, 단위 kb u:
nFLT code> = (페이지 폴트 수) 페이지 폴트 수 <br>v: <code>nDRT
= (더티 페이지 수) 이후 수정된 페이지 수 마지막으로 작성된 시간 y:
WCHAN
= (Sleeping in Function) 프로세스가 절전 모드인 경우 절전 모드의 시스템 함수 이름이 표시됩니다. z:
플래그 code> = (작업 플래그 <sched.h>) 작업 플래그, sched.h 참조<p></p>
<p></p> <p>top -Hp PID 실행, 예: top -Hp 15477<img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/00a3d0e0fc1c314d9dbd1c777dd54c3b-4.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%"></p>프로세스의 스레드 보기 <p><span style="font-family: " microsoft yahei>참고: 이때 PID는 스레드 id</span></p>
<p><span style="font-family: " microsoft yahei></span>스레드 15571에 예외가 있어서 확인해야 할 경우 jstack을 사용하여 스택을 인쇄하고 스레드 15571 상태를 확인하세요(15571 16진수 = 3cd3) </p>🎜 🎜🎜🎜🎜 2. jstack 🎜🎜 참조 java 명령 - jstack 도구 🎜🎜 ps jstack 로그를 통해 Java 프로세스를 볼 수 있습니다: 🎜🎜🎜🎜🎜 🎜🎜🎜 모니터 모니터: 🎜🎜🎜 모니터는 Java에서 스레드 간의 상호 배제 및 협력을 달성하는 것은 객체 잠금 또는 클래스 잠금으로 간주될 수 있습니다. 🎜🎜모든 개체에는 모니터가 하나만 있습니다. 🎜🎜다음 그림은 스레드와 모니터의 관계 및 스레드의 상태 전이를 설명합니다. 🎜🎜🎜🎜🎜🎜Entrt Set: 스레드가 동기화를 통해 개체의 잠금을 획득하도록 요청함을 나타냅니다. 객체가 잠겨 있으면 소유자를 입력하고 그렇지 않으면 항목 영역에서 기다리십시오. 객체 잠금이 다른 스레드에 의해 해제되면 즉시 경쟁에 참여합니다. 🎜🎜🎜🎜The Owner(소유자): 스레드가 개체 잠금을 위해 성공적으로 경쟁했음을 나타냅니다. 🎜🎜<p><span style="font-family: " microsoft yahei>Wait Set: 스레드가 객체의 <span style="font-family: " microsoft yahei>object.wait</span>() 메서드를 통해 객체의 잠금을 해제하고 대기 영역에서 깨어나기를 기다림을 나타냅니다. </span></p>
<p><span style="font-family: " microsoft yahei>그림에서 볼 수 있듯이 모니터는 특정 순간에 하나의 스레드만 소유할 수 있습니다. 이 스레드는 <span style="font-family: " microsoft yahei><code><code><span style="font-family: " microsoft yahei>Active Thread</span>
,而其它线程都是 <span style="font-family: " microsoft yahei>Waiting</span> <span style="font-family: " microsoft yahei>Thread</span>
,分别在两个队列 <span style="font-family: " microsoft yahei>Entry</span> <span style="font-family: " microsoft yahei>Set</span>
和 <span style="font-family: " microsoft yahei>Wait</span> <span style="font-family: " microsoft yahei>Set</span>
里面等候。
在 <span style="font-family: " microsoft yahei>Entry</span> <span style="font-family: " microsoft yahei>Set</span>
中等待的线程动作是 <span style="font-family: " microsoft yahei>Waiting for monitor entry</span>。
在 <span style="font-family: " microsoft yahei>Wait</span> <span style="font-family: " microsoft yahei>Set</span>
中等待的线程动作是 <span style="font-family: " microsoft yahei>in Object.wait()</span>
Active Thread
입니다. Waiting <p>Thread<span style="color: #888888"></span></p>
, 각각 두 개의 대기열 Entry <h4 id="Set">Set</h4>
및 <p>Wait<strong> </strong>Set</p>
에서 대기 중입니다. Entry
Waiting for monitor Entry입니다. <strong>Wait</strong> <span style="color: #993300">Set<strong></strong></span>
에서 대기 중인 스레드 작업은 Object.wait()
<p>입니다. <strong>스레드가 임계 섹션에 들어가기 위해 적용되면 Entry Set 대기열에 들어갑니다. </strong><span style="color: #993300"><strong><strong>(Synchronized로 보호되는 코드 세그먼트를 임계 섹션이라고 부릅니다. 스레드가 임계 섹션에 진입하기 위해 적용되면 "Entry Set" 대기열에 들어갑니다.) </strong></strong></span>스레드 상태: </p>
<p><strong>NEW</strong>: 아님 시작되었습니다. 덤프에 나타나지 않습니다. </p>
<h4></h4>RUNNABLE<p>: 가상 머신에서 실행되는 실행 상태입니다. </p>
<p>소유자 영역<strong></strong><span style="color: #000000"></span></p>BLOCKED<p>: 차단되었으며 모니터 잠금을 기다리는 중입니다. <strong></strong>엔트리 세트 구역에서 자물쇠<span style="color: #000000"></span>를 기다리고 있습니다. </p>
<p><strong>WATING</strong>: 다른 스레드가 특정 작업을 수행할 때까지 무기한 대기합니다. <span style="color: #000000"></span>Wait Set 영역에서</p>
<p>특정 조건이나 모니터가 발생할 때까지 기다리세요. 일반적으로 wait()와 같은 문에 머물게 됩니다. <strong></strong><span style="color: #000000">TIMED_WATING</span>: 다른 스레드에서 특정 작업을 기다리는 시간이 제한되어 있습니다. </p>
<p> <span style="color: #808080">Wait </span>Set Area </p>
<p>와 WAITING의 차이점은 wait() 및 기타 문에 wait(timeout) 시간 제한을 추가한다는 것입니다. <span style="color: #808080"></span></p>TERMINATED<h4 id="종료되었습니다">: 종료되었습니다. </h4>
<p>호출 수정</p>
<p>은 스레드가 메서드를 호출할 때 추가로 중요한 작업을 나타냅니다. 위의 메서드 호출을 수정하세요. <strong></strong></p>locked<p> 대상 : 모니터 소유자인 객체 잠금을 성공적으로 신청하려면 동기화를 사용하세요. <strong>소유자 공간. </strong></p>
<p><strong>잠금 대기 중</strong> 대상: 동기화를 사용한 개체 잠금 신청이 실패했습니다. </p>항목 세트 영역에서 잠금을 기다리는 중입니다. 스레드 상태는 Blocked<p><strong></strong></p>waiting on<p> </p>
<address> 목표: 동기화를 사용하여 객체 잠금을 성공적으로 적용한 후 잠금을 해제하고 대기 설정 영역에서 잠금을 기다립니다. 스레드 상태는 WAITING 또는 TIMED_WATING<strong></strong>🎜parking to wait for🎜 <address> 대상: park()가 🎜Wait Set 영역에서 호출되어 허가를 기다리고 있습니다. 🎜🎜🎜🎜(park는 모니터를 통해 개체를 차단하지 않는 기본 스레드 차단 기본 요소입니다. 🎜🎜🎜🎜 park: 스레드가 잠금을 얻을 필요가 없는 wait와 비교하여 WAITING 상태로 들어갑니다. 기다렸다가 unpark를 통해 깨어남) 🎜 🎜🎜Thread action🎜🎜Thread 상태가 생성되는 이유. 🎜🎜🎜runnable🎜: 소유자 영역, Object.wait()🎜의 RUNNABLE🎜🎜🎜 상태: wait() 호출, 대기 설정 영역, 상태는 WAITING 또는 TIMED_WAITING, 대기 수정 🎜🎜🎜모니터 항목 대기🎜: 잠금 대기 중, 진입 설정 영역, 상태 BLOCKED, 수정 대기 중 잠금🎜🎜🎜대기 조건🎜: 특정 조건으로 인해 주차됨, 대기 설정 영역, 상태는 대기 중🎜🎜🎜sleeping🎜: 휴면 스레드, 스레드 호출 .수면()🎜<h4 id="요약">요약</h4>
<p>1. 먼저 스레드 상태/스레드 동작을 살펴보고(더 직관적으로) 스레드가 현재 어느 단계에 있는지 확인하세요. 그런 다음 통화 수정 및 잠금 상태를 보면 기본적으로 보조 스레드에 문제가 있는지 확인할 수 있습니다. </p>
<p>2. 짧은 시간(문제가 있을 수 있는 기간)에 스레드 스냅샷을 여러 번 인쇄할 수 있습니다. ) 그런 다음 문제가 있을 수 있는 특정 스레드의 위치를 확인합니다. 이러한 경우 문제를 효과적으로 찾을 수 있습니다. </p>
<h3 id="jps"> 3. jps</h3>
<p>는 리눅스 명령어 ps와 비슷합니다. </p>
<p>참고 자바 명령어 학습 시리즈(1) - Jps</p>
<p>./jps</p>
<p style="text-align: center;"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/2ed616fdd55510daae590e67d898e325-5.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%"></p>
<p> ./jps -q</p>
<p style="text-align: center;"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/2ed616fdd55510daae590e67d898e325-6.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%"></p>
<p>./jps - m</p> <p style="text-align: center;"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/5cca488162d1a4710804a5c5e517320b-7.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%"></p>
<p></p>./JPS -L j./JPS -V<p style="text-align: center;"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/5cca488162d1a4710804a5c5e517320b-8.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%"></p>
<p></p> 4, JMAP<p style="text-align: center;"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/d80cdd751a575a3d3b19657daefa47da-9.png?x-oss-process=image/resize,p_40" class="lazy" alt="" style="max-width:90%" style="max-width:90%"> 참고 자료: Java 명령 학습 시리즈(3) -JMAP</p>
<h3 id="Java-명령-JMap-명령은"> Java 명령 -JMap 명령은 </h3>
<p> jmap을 사용합니다. -heap PID: 힙 사용량 </p>
<p>jmap -histo PID: 개체 상태 </p>
<p> (jmap -histo:live 이 명령이 실행되면 JVM은 먼저 gc를 트리거한 다음 통계를 수집합니다. </p>
<p>프로젝트의 클래스에 중점을 둡니다. [C는 문자열에 사용되는 문자열 배열입니다. [B는 네트워크 계층에서 사용되는 바이트 배열입니다. 둘이 더 크더라도 상관없습니다.[]</p>
<p> </p> [S는 짧습니다. []<p> </p> <p> [나는 정수입니다. []<span style=" font-family: Arial; letter-spacing: 0.5px"></span> <br> 더 많은 관련 튜토리얼을 보려면 <span style=" font-family: Arial; letter-spacing: 0.5px">Java 비디오 튜토리얼</span>, <br>Java 개발 그래픽 튜토리얼<span style=" font-family: Arial; letter-spacing: 0.5px">, </span>부트스트랩 비디오 튜토리얼<br>을 방문하세요.</p>
</address>
</address>
위 내용은 Java에서 JVM 명령을 사용하여 서버 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
