linux 查看jvm linux查看jvm使用情况

老铁们,大家好,相信还有很多朋友对于linux 查看jvm和linux查看jvm使用情况的相关问题不太懂,没关系,今天就由我来为大家分享分享linux 查看jvm以及linux查看jvm使用情况的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

linux线程优先级数字越大越高

linux内核线程怎么设置优先级?

Linux内核的三种调度策略:

1,SCHED_OTHER分时调度策略,

2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃

3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平Linux线程优先级设置首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义:intsched_get_priority_max(intpolicy);intsched_get_priority_min(intpolicy);SCHED_OTHER是不支持优先级使用的,而SCHED_FIFO和SCHED_RR支持优先级的使用,他们分别为1和99,数值越大优先级越高。设置和获取优先级通过以下两个函数:intpthread_attr_setschedparam(pthread_attr_t*attr,conststructsched_param*param);intpthread_attr_getschedparam(constpthread_attr_t*attr,structsched_param*param);例如以下代码创建了一个优先级为10的线程:structsched_param{int__sched_priority;//所要设定的线程优先级};例:创建优先级为10的线程pthread_attr_tattr;structsched_paramparam;pthread_attr_init(attr);pthread_attr_setschedpolicy(attr,SCHED_RR);param.sched_priority=10;pthread_attr_setschedparam(attr,?m);pthread_create(xxx,attr,xxx,xxx);pthread_attr_destroy(attr);

cpu多线程和jvm多线程?

一cpu个数、核数、线程数的关系

cpu个数:是指物理上,也及硬件上的核心数;

核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;一个CPU核心数模拟出2线程的CPU

线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数*核数,及程数=cpu个数(2)*核数(2)=4

Windows:wmic然后物理CPU数“cpugetNumberOfCores”,CPU核心数“cpugetNumberOfLogicalProcessors”

Linux:

查看CPU个数cat/proc/cpuinfo|grepphysicalid|sort|uniq|wc-l

查看核数cat/proc/cpuinfo|grepcpucores|uniq

二cpu线程数和Java多线程

(1)线程是CPU级别的,单个线程同时只能在单个cpu线程中执行

(2)Java多线程并不是由于cpu线程数为多个才称为多线程,当Java线程数大于cpu线程数,操作系统使用时间片机制,采用线程调度算法,频繁的进行线程切换。

(3)线程是操作系统最小的调度单位,进程是资源(比如:内存)分配的最小单位

(4)Java中的所有线程在JVM进程中,CPU调度的是进程中的线程

线程的调度是指按照特定的机制为多个线程分配CPU的使用权。有两种调度模型:分时调度模型和抢占式调度模型

分时调度模型是指让所有线程轮流获得CPU的使用权,并且平均分配每个线程占用CPU的时间片。

Java虚拟机采用抢占式调度模型,是指优先让可运行池中处于就绪态的线程中优先级高的占用CPU,如果可运行池中线程的优先级相同,那么就随机选择一个线程,使其占用CPU,处于运行状态的线程会一直执行,直至它不得不放弃CPU,一个线程会因为以下原因放弃CPU:

(1)Java虚拟机让当前线程暂时放弃CPU,转到就绪态,使其他线程获得运行机会

(2)当前线程因为某些原因而处于阻塞状态

(3)线程运行结束

Java线程让步:

3.Thread.yield()方法

就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行(根据CPU的调度),并不是单纯的让给其他线程。

4.等待其他线程结束:join()

当前运行的线程可以调用另一个线程的join()方法,当前运行的线程将转到阻塞状态,直至另一个线程运行结束,它才会恢复运行(阻塞恢复到就绪)

什么是线程调度器(ThreadScheduler)和时间分片(TimeSlicing)?

线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦创建一个线程并启动它,它的执行便依赖于线程调度器的实现。

时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。

线程调度并不受到Java虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让的程序依赖于线程的优先级)。

rtos和linux区别?

区别就是两者意思是不一样具体的不同如下

rtos是实时操作系统

RTOS(Real-TimeOperatingSystem),实时操作系统。

Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机

如何查看unix 的java内存使用情况

jmap(linux下特有,也是很常用的一个命令)

观察运行中的jvm物理内存的占用情况。

参数如下:

-heap:打印jvm heap的情况

-histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。

-histo:live:同上,但是只答应存活对象的情况

-permstat:打印permanent generation heap情况

命令使用:

jmap-heap 3409

可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况

输出内容:

jmap-histo 3409| jmap-histo:live 3409

可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。

输出内容:

写个脚本,可以很快把占用heap最大的对象找出来,对付内存泄漏特别有效。

如果结果很多,可以用以下命令输出到文本文件。

jmap-histo 3409| jmap-histo:live 3409> a.txt

jinfo:可以输出并修改运行时的java进程的opts。

jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。

jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。

jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。

详细:在使用这些工具前,先用JPS命令获取当前的每个JVM进程号,然后选择要查看的JVM。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。

jstat-class pid:显示加载class的数量,及所占空间等信息。

jstat-compiler pid:显示VM实时编译的数量等信息。

jstat-gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

jstat-gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。

jstat-gcnew pid:new对象的信息。

jstat-gcnewcapacity pid:new对象的信息及其占用量。

jstat-gcold pid:old对象的信息。

jstat-gcoldcapacity pid:old对象的信息及其占用量。

jstat-gcpermcapacity pid: perm对象的信息及其占用量。

jstat-util pid:统计gc信息统计。

jstat-printcompilation pid:当前VM执行的信息。

除了以上一个参数外,还可以同时加上两个数字,如:jstat-printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。

jmap是一个可以输出所有内存中对象的工具,甚至可以将VM中的heap,以二进制输出成文本。

命令:jmap-dump:format=b,file=heap.bin

file:保存路径及文件名

pid:进程编号

?jmap-histo:live pid| less:堆中活动的对象以及大小

?jmap-heap pid:查看堆的使用状况信息

jinfo:的用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法是jinfo-opt pid如:查看2788的MaxPerm大小可以用 jinfo-flag MaxPermSize 2788。

jconsole是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。使用方法:命令行里打 jconsole,选则进程就可以了。

JConsole中关于内存分区的说明。

Eden Space(heap):内存最初从这个线程池分配给大部分对象。

Survivor Space(heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。

Tenured Generation(heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。

Permanent Generation(non-heap):保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,

Code Cache(non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)

?jstack(查看jvm线程运行状态,是否有死锁现象等等信息): jstack pid: thread dump

?jstat-gcutil pid 1000 100: 1000ms统计一次gc情况统计100次;

另外推荐一款查看jmap dump的内存对象工具 MemoryAnalyzer

Linux 当jmeter压测时,JVM内存泄漏,端口不够问题,解决办法

在Linux环境,使用jmeter压测会遇到很多问题,比如:配置不对,权限不足这些都是很好解决。

但是遇到这几个问题:

1.内存泄漏  2.端口不够

遇到两个问题网上解决办法都很杂,没有一个清晰明了的解决办法,所以针对这两个问题,写出解决办法:

例如:

屏蔽“聚合报告”“查看结果数”,等插件

脚本尽量最小变量,多个线程组下CSV文件设置,如果只在当前线程组使用变量,尽量不使用“全部现场”。

bin/下的jmeter文件(非jmeter.sh)编辑:(Windows环境编辑jmeter.bat)

JVM_ARGS="-Xms4g-Xmx4g"

还有另一个方法:启动加参数设置:JVM_ARGS="-Xms2048m-Xmx2048m" jmeter-t test.jmx

(上面调整内存格式可以1g 2g,也可以1024m 2048m,这样写都可以)

Response code: Non HTTP response code: java.net.BindException

Response message: Non HTTP response message: Address already in use: connect

Linux本来的默认的端口欧范围:1024-65535,64511个,所以当压测接口调用超过65535个就会出现端口不够的问题。

查Linux支持多少端口,

cat/proc/sys/net/ipv4/ip_local_port_range

然后找运维修改,或者:

修改文件 /etc/sysctl.conf

键入如下语句:

net.ipv4.ip_local_port_range= 1024 65535

压测过程还有其他问题,比如宽带限制,负载均衡,关闭缓存等,多百度即可。

阅读剩余
THE END