「ovirtjava」ovirtjavasdkapi

博主:adminadmin 2023-01-11 15:21:09 501

今天给各位分享ovirtjava的知识,其中也会对ovirtjavasdkapi进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA程序开始之后VIRT占用过高是什么原因造成的,怎么解决

从代码的角度,软件开发人员主要关注java.lang.OutOfMemoryError: Java heap space异常,减少不必要的对象创建,同时避免内存泄漏。

现在以一个实际的例子分析内存占用的故障排查。

通过top命令,发现PID为9004的Java进程一直占用比较高的内存不释放(24.7%),出现高内存占用的故障。

ps -mp 9004 -o THREAD,tid,time,rss,size,%mem

发现PS命令可以查到具体进程的CPU占用情况,但是不能查到一个进程下具体线程的内存占用情况。

java里测试添加的命令语句是什么

ava性能调试命令

java性能调试命令_性能测试--十个命令迅速发现性能问题

投机启示录

原创

关注

0点赞·85人阅读

十个命令迅速发现性能问题

uptime

dmesg | tail

vmstat 1

mpstat -P ALL 1

pidstat 1

iostat -xz 1

free -m

sar -n DEV 1

sar -n TCP,ETCP 1

top

1. uptime

$ uptime

23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02

这是一种用来快速查看系统平均负载的方法,它表明了系统中有多少要运行的任务(进程)。在 Linux 系统中,这些数字包含了需要在 CPU 中运行的进程以及正在等待 I/O(通常是磁盘 I/O)的进程。它仅仅是对系统负载的一个粗略展示,稍微看下即可。你还需要其他工具来进一步了解具体情况。

这三个数字展示的是一分钟、五分钟和十五分钟内系统的负载总量平均值按照指数比例压缩得到的结果。从中我们可以看到系统的负载是如何随时间变化的。比方你在检查一个问题,然后看到 1 分钟对应的值远小于 15 分钟的值,那么可能说明这个问题已经过去了,你没能及时观察到。

在上面这个例子中,系统负载在随着时间增加,因为最近一分钟的负载值超过了 30,而 15 分钟的平均负载则只有 19。这样显著的差距包含了很多含义,比方 CPU 负载。若要进一步确认的话,则要运行 vmstat 或 mpstat 命令。

2. dmesg | tail

$ dmesg | tail

[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0

[...]

[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child

[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB

[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.

这条命令显式了最近的 10 条系统消息,如果它们存在的话。查找能够导致性能问题的错误。上面的例子包含了 oom-killer,以及 TCP 丢弃一个请求。

千万不要错过这一步!dmesg 命令永远值得一试

3. vmstat 1

$ vmstat 1

procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0

32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0

32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0

32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0

32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0

vmstat(8) 是虚拟内存统计的简称,其是一个常用工具(几十年前为了 BSD 所创建)。其在每行打印一条关键的服务器的统计摘要。

vmstat 命令指定一个参数 1 运行,来打印每一秒的统计摘要。(这个版本的 vmstat)输出的第一行的那些列,显式的是开机以来的平均值,而不是前一秒的值。现在,我们跳过第一行,除非你想要了解并记住每一列。

检查这些列:

r:CPU 中正在运行和等待运行的进程的数量。其提供了一个比平均负载更好的信号来确定 CPU 是否饱和,因为其不包含 I/O。解释:“r”的值大于了 CPU 的数量就表示已经饱和了。

free:以 kb 为单位显式的空闲内存。如果数字位数很多,说明你有足够的空闲内存。“free -m” 命令,是下面的第七个命令,其可以更好的说明空闲内存的状态。

si, so:Swap-ins 和 swap-outs。如果它们不是零,则代表你的内存不足了。

us, sy, id, wa, st:这些都是平均了所有 CPU 的 CPU 分解时间。它们分别是用户时间(user)、系统时间(内核)(system)、空闲(idle)、等待 I/O(wait)、以及占用时间(stolen)(被其他访客,或使用 Xen,访客自己独立的驱动域)。

CPU 分解时间将会通过用户时间加系统时间确认 CPU 是否为忙碌状态。等待 I/O 的时间一直不变则表明了一个磁盘瓶颈;这就是 CPU 的闲置,因为任务都阻塞在等待挂起磁盘 I/O 上了。你可以把等待 I/O 当成是 CPU 闲置的另一种形式,其给出了为什么 CPU 闲置的一个线索。

对于 I/O 处理来说,系统时间是很重要的。一个高于 20% 的平均系统时间,可以值得进一步的探讨:也许内核在处理 I/O 时效率太低了。

在上面的例子中,CPU 时间几乎完全花在了用户级,表明应用程序占用了太多 CPU 时间。而 CPU 的平均使用率也在 90% 以上。这不一定是一个问题;检查一下“r”列中的饱和度。

4. mpstat -P ALL 1

$ mpstat -P ALL 1

Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)

07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78

07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99

07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00

07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00

07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03

[...]

这个命令打印每个 CPU 的 CPU 分解时间,其可用于对一个不均衡的使用情况进行检查。一个单独 CPU 很忙碌则代表了正在运行一个单线程的应用程序。

5. pidstat 1

$ pidstat 1

Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)

07:41:02 PM UID PID %usr %system %guest %CPU CPU Command

07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0

07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave

07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java

07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java

07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java

07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat

07:41:03 PM UID PID %usr %system %guest %CPU CPU Command

07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave

07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java

07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java

07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass

07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat

pidstat 命令有点像 top 命令对每个进程的统计摘要,但循环打印一个滚动的统计摘要来代替 top 的刷屏。其可用于实时查看,同时也可将你所看到的东西(复制粘贴)到你的调查记录中。

上面的例子表明两个 Java 进程正在消耗 CPU。%CPU 这列是所有 CPU 合计的;1591% 表示这个 Java 进程消耗了将近 16 个 CPU。

6. iostat -xz 1

$ iostat -xz 1

Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

73.96 0.00 3.73 0.03 0.06 22.21

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09

xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25

xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26

dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04

dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00

dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03

[...]

这是用于查看块设备(磁盘)情况的一个很棒的工具,无论是对工作负载还是性能表现来说。查看个列:

r/s, w/s, rkB/s, wkB/s:这些分别代表该设备每秒的读次数、写次数、读取 kb 数,和写入 kb 数。这些用于描述工作负载。性能问题可能仅仅是由于施加了过大的负载。

await:以毫秒为单位的 I/O 平均消耗时间。这是应用程序消耗的实际时间,因为它包括了排队时间和处理时间。比预期更大的平均时间可能意味着设备的饱和,或设备出了问题。

avgqu-sz:向设备发出的请求的平均数量。值大于 1 说明已经饱和了(虽说设备可以并行处理请求,尤其是由多个磁盘组成的虚拟设备。)

%util:设备利用率。这个值是一个显示出该设备在工作时每秒处于忙碌状态的百分比。若值大于 60%,通常表明性能不佳(可以从 await 中看出),虽然它取决于设备本身。值接近 100% 通常意味着已饱和。

如果该存储设备是一个面向很多后端磁盘的逻辑磁盘设备,则 100% 利用率可能只是意味着当前正在处理某些 I/O 占用,然而,后端磁盘可能远未饱和,并且可能能够处理更多的工作。

请记住,磁盘 I/O 性能较差不一定是程序的问题。许多技术通常是异步 I/O,使应用程序不会被阻塞并遭受延迟(例如,预读,以及写缓冲)。

7. free -m

$ free -m

total used free shared buffers cached

Mem: 245998 24545 221453 83 59 541

-/+ buffers/cache: 23944 222053

Swap: 0 0 0

右边的两列显式:

buffers:用于块设备 I/O 的缓冲区缓存。

cached:用于文件系统的页面缓存。

我们只是想要检查这些不接近零的大小,其可能会导致更高磁盘 I/O(使用 iostat 确认),和更糟糕的性能。上面的例子看起来还不错,每一列均有很多 M 个大小。

比起第一行,-/+ buffers/cache 提供的内存使用量会更加准确些。Linux 会把暂时用不上的内存用作缓存,一旦应用需要的时候就立刻重新分配给它。所以部分被用作缓存的内存其实也算是空闲的内存。为了解释这一点, 甚至有人专门建了个网站: linuxatemyram。

如果你在 Linux 上安装了 ZFS,这一点会变得更加困惑,因为 ZFS 它自己的文件系统缓存不算入free -m。有时候发现系统已经没有多少空闲内存可用了,其实内存却都待在 ZFS 的缓存里。

8. sar -n DEV 1

$ sar -n DEV 1

Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)

12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil

12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00

12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00

12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil

12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00

12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00

12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

这个工具可以被用来检查网络接口的吞吐量:rxkB/s 和 txkB/s,以及是否达到限额。上面的例子中,eth0 接收的流量达到 22Mbytes/s,也即 176Mbits/sec(限额是 1Gbit/sec)

我们用的版本中还提供了 %ifutil 作为设备使用率(接收和发送的最大值)的指标。我们也可以用 Brendan 的 nicstat 工具计量这个值。一如 nicstat,sar 显示的这个值是很难精确取得的,在这个例子里面,它就没在正常的工作(0.00)。

9. sar -n TCP,ETCP 1

$ sar -n TCP,ETCP 1

Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)

12:17:19 AM active/s passive/s iseg/s oseg/s

12:17:20 AM 1.00 0.00 10233.00 18846.00

12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s

12:17:20 AM 0.00 0.00 0.00 0.00 0.00

12:17:20 AM active/s passive/s iseg/s oseg/s

12:17:21 AM 1.00 0.00 8359.00 6039.00

12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s

12:17:21 AM 0.00 0.00 0.00 0.00 0.00

这是一些关键的 TCP 指标的汇总视图。这些包括:

active/s:每秒本地发起 TCP 连接数(例如,通过 connect())。

passive/s:每秒远程发起的 TCP 连接数(例如,通过 accept())。

retrans/s:每秒重传 TCP 次数。

active 和 passive 的连接数往往对于描述一个粗略衡量服务器负载是非常有用的:新接受的连接数(passive),下行连接数(active)。可以理解为 active 连接是对外的,而 passive 连接是对内的,虽然严格来说并不完全正确(例如,一个 localhost 到 localhost 的连接)。

重传是出现一个网络和服务器问题的一个征兆。其可能是由于一个不可靠的网络(例如,公网)造成的,或许也有可能是由于服务器过载并丢包。上面的例子显示了每秒只有一个新的 TCP 连接。

10. top

$ top

top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92

Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie

%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers

KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java

4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave

66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top

5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java

4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java

1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init

2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0

5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H

6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0

8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top 命令包含了很多我们之前已经检查过的指标。可以方便的执行它来查看相比于之前的命令输出的结果有很大不同,这表明负载是可变的。

top 的一个缺点是,很难看到数据随时间变动的趋势。vmstat 和 pidstat 提供的滚动输出会更清楚一些。如果你不以足够快的速度暂停输出(Ctrl-S 暂停,Ctrl-Q 继续),一些间歇性问题的线索也可能由于被清屏而丢失。

libvirt-java怎么获得kvm虚拟机内存使用率

在云平台中,基本都需要这样一个功能,就是收集虚拟机监控数据,比如cpu使用率、内存使用率、磁盘io、网络io等信息。通常这些信息Hypervisor都会提供接口供获取,这种获取方式成本是低廉的,通常不会对整个虚拟化环境有影响。想要获取更多的监控详情信息,那么则需要在虚机里面安装agent来收集监控数据,这种方式获取成本高,有时候可能不会接受镜像里面有agent的事实,这好比被安装了后门一样。两种方式各有优劣,看各自的需求场景,具体使用具体分析。

KVM内存虚拟化

KVM在内存虚拟化上有哪些相关技术可以使用。

对于客户机的内存分配上,KVM提供了ballooning机制,其本质就是可以根据宿主机系统内存使用的紧张程度来动态增加或回收客户机的内存占用。 如果云计算环境准备实施oversell,那么这个机制是十分有用的,因为宿主机上的客户机不可能同时满载,这样便可以有效利用物理内存。

如果宿主机上跑着很多相同镜像的客户机,那么这些客户机的内存段是有相同之处的,KVM提供了一个KSM(Kernel Samepage Merging)机制,可以将相同的内存合并。 这就意味着在ballooning机制基础上还能更进一步优化内存使用率。但是KSM的开销也很大,尤其是当客户机的镜像耦合非常低会造成KSM效率非常低,不仅内存合并效果不佳, 还会影响宿主机的系统性能,进而影响所有客户机的性能,需要慎重使用。

此外还有HugePage和Transparent HugePage技术。前者可以给客户机分配一块大内存独占使用,但是因为独占导致很多不灵活,不能在宿主机内存紧张的时候换出; 而后者则是继承了HugePage的优点并弥补了这个缺点。大页技术的使用也需要慎重,如果客户机运行的应用比较依赖内存性能(Redis之流),那么开启这个是值得的。

下面就是解析一下OpenStack获取虚机内存的方式,以及一些需要注意的坑。

获取接口

使用libvirt的命令行工具可以获取虚机的内存信息,方式如下:

$ virsh list

Id    Name                           State

----------------------------------------------------

46    instance-0000081a              running

117   instance-000008c0              running

122   instance-00000920              running

$ virsh dommemstat 46

actual 2097152

swap_in 0

rss 1031060

actual是启动虚机时设置的最大内存,rss是qemu process在宿主机上所占用的内存,可以通过 grep VmRSS /proc/$(pidof qemu-system-x86_64)/status 得到。但是要获取的是虚机内部的内存使用情况,这样明显不能满足需求。

还需要给虚机做些配置,给虚机的libvirt.xml描述文件添加下面的内容:

#每10s钟收集一次

memballoon model="virtio"

stats period="10"/

/memballoon

再次查询虚机的内存信息,得到:

actual 2097152

swap_in 0

swap_out 0

unused 1904816

available 2050112

rss 299952

unused代表虚机内部未使用的内存量,available代表虚机内部识别出的总内存量,那么虚机内部的内存使用量则是(available-unused)的结果。

windows注意事项

首先windows需要安装virtio-win相关驱动,除此之外还需要启动BLNSVR服务。

在 Windows 2008r2 and Windows 2012/Win8 :

Copy and rename as Administrator the WIN7AMD64 directory from the virtio.iso to “c:/Program files/Balloon”

Open a CMD as Administrator and cd into “c:/Program Files/Balloon”

Install the BLNSVR with “BLNSVR.exe -i”

在 Windows 2003 / Windows Xp :

Download the “devcon” software on microsoft website kb311272

devcon install BALLOON.inf “PCIVEN_1AF4DEV_1002SUBSYS_00051AF4REV_00”

OpenStack中的使用

在OpenStack中,ceilometer组件的meter项有一个memory.usage,这一项便是采样虚机内存使用量信息,在I版本是不能获取到的,这个BP并有相关的实现,代码已经合并到master,且在Juno版本中放出。

如何查看java进程大量占用内存

如何查看java进程大量占用内存

你好,方法如下:

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:

(1)top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:

$ top -u oracle

内容解释:

PID:进程的ID

USER:进程所有者

PR:进程的优先级别,越小越优先被执行

NInice:值

VIRT:进程占用的虚拟内存

RES:进程占用的物理内存

SHR:进程使用的共享内存

S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数

%CPU:进程占用CPU的使用率

%MEM:进程使用的物理内存和总内存的百分比

TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

COMMAND:进程启动命令名称

常用的命令:

P:按%CPU使用率排行

T:按MITE+排行

M:按%MEM排行

(2)pmap

可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:

$ pmap -d 14596

(3)ps

如下例所示:

$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 其中rsz是是实际内存

$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle | sort -nrk5

其中rsz为实际内存,上例实现按内存排序,由大到小

ovirtjava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ovirtjavasdkapi、ovirtjava的信息别忘了在本站进行查找喔。