Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
.none {
-webkit-filter: none;
filter: none;
}
.blur {
-webkit-filter: blur(3px);
filter: blur(3px);
}
.grayscale {
-webkit-filter: grayscale(1);
filter: grayscale(1);
}
.invert {
-webkit-filter: invert(1);
filter: invert(1);
}
.sepia {
-webkit-filter: sepia(1);
filter: sepia(1);
}
button#snapshot {
margin: 0 10px 25px 0;
width: 110px;
}
video {
object-fit: cover;
}
const filterSelect=document.querySelector('select#filter');
const video=window.video=document.querySelector('video');
filterSelect.onchange=function() {
video.className=filterSelect.value;
};
navigator.mediaDevices.getUserMedia({
audio: false,
video: true
}).then(handleSuccess).catch(handleError);
function handleSuccess(stream) {
video.srcObject=stream;
}
function handleError(error) {
console.log('navigator.MediaDevices.getUserMedia error: ', error.message, error.name);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="./index.css">
</head>
<body>
<video playsinline autoplay></video>
<label for="filter">Filter: </label>
<select id="filter">
<option value="none">None</option>
<option value="blur">Blur</option>
<option value="grayscale">Grayscale</option>
<option value="invert">Invert</option>
<option value="sepia">Sepia</option>
</select>
<script src="./index.js"></script>
</body>
</html>
注本頭條號(hào),專注做前端
之前分享過(guò)其他的select美化插件,比如 easydropdown等都非常不錯(cuò),這里要給大家介紹的是另外一款select下拉美化插件——selectFilter.js ,基于jquery,配置簡(jiǎn)單。
<script type="text/javascript">
//
JConsole 圖形用戶界面是一種符合 Java 管理擴(kuò)展 (JMX) 規(guī)范的監(jiān)視工具。JConsole 使用 Java 虛擬機(jī) (Java VM) 的廣泛檢測(cè)來(lái)提供有關(guān)在 Java 平臺(tái)上運(yùn)行的應(yīng)用程序的性能和資源消耗的信息。
獲取java PID的方法:通過(guò)任務(wù)管理器查看、通過(guò)Java提供的jps命令查看。
使用jsconsole hostName:portNum命令:hostName是運(yùn)行應(yīng)用程序的系統(tǒng)的名稱,portNum是您在啟動(dòng) Java VM 時(shí)啟用 JMX 代理時(shí)指定的端口號(hào)。
使用service:jmx:<protocol>:<sap>命令:使用 JMX 服務(wù) URL 進(jìn)行連接。
將 JConsole 連接到應(yīng)用程序后,JConsole 由六個(gè)選項(xiàng)卡組成。
顯示有關(guān) CPU 使用情況、內(nèi)存使用情況、線程計(jì)數(shù)和在 Java VM 中加載的類的圖形監(jiān)視信息。
提供有關(guān)內(nèi)存消耗和內(nèi)存池的信息。
提供執(zhí)行GC的操作,可以隨時(shí)點(diǎn)擊按鈕進(jìn)行垃圾回收
Java VM 管理兩種類型的內(nèi)存:堆內(nèi)存和非堆內(nèi)存,這兩種內(nèi)存都是在 Java VM 啟動(dòng)時(shí)創(chuàng)建的。
內(nèi)存池和內(nèi)存管理器是 Java VM 內(nèi)存系統(tǒng)的關(guān)鍵方面。
垃圾回收 (GC) 是 Java VM 釋放不再引用的對(duì)象占用的內(nèi)存的方式。通常認(rèn)為具有活動(dòng)引用為"活動(dòng)"且未引用(或無(wú)法訪問(wèn))對(duì)象的對(duì)象為"已死"。垃圾回收是釋放死對(duì)象使用的內(nèi)存的過(guò)程。GC 使用的算法和參數(shù)對(duì)性能有顯著影響。
Java hotspot VM 垃圾回收器使用代數(shù) GC。生成 GC 利用大多數(shù)程序符合以下概括的觀察。
提供有關(guān)線程使用的信息。
顯示有關(guān)類加載的信息。
提供有關(guān) Java VM 的信息。
以通用方式顯示有關(guān)在平臺(tái) MBean 服務(wù)器注冊(cè)的所有 MBeans 的信息。MBeans 選項(xiàng)卡允許您訪問(wèn)平臺(tái) MXBean 檢測(cè)的完整集,包括在其他選項(xiàng)卡中不可見(jiàn)的儀器。此外,您還可以使用 MBeans 選項(xiàng)卡監(jiān)視和管理應(yīng)用程序的 MBeans。
列出目標(biāo)系統(tǒng)上已檢測(cè)的 Java 虛擬機(jī) (JVM)。
監(jiān)視 Java 虛擬機(jī) (JVM) 統(tǒng)計(jì)信息。
對(duì)Java應(yīng)用程序的資源和性能進(jìn)行實(shí)時(shí)的命令行的監(jiān)控,包括了對(duì)Heap size和垃圾回收狀況的監(jiān)控。
命令格式
jstat [-option] [PID]
option參數(shù)
1.jstat –class <pid> : 顯示加載class的數(shù)量,及所占空間等信息。
2.jstat -compiler <pid>顯示VM實(shí)時(shí)編譯的數(shù)量等信息。
3.jstat -gc <pid>: 可以顯示gc的信息,查看gc的次數(shù),及時(shí)間。
4.jstat -gccapacity <pid>:可以顯示,VM內(nèi)存中三代(young,old,perm)對(duì)象的使用和占用大小
5.jstat -gcutil <pid>:統(tǒng)計(jì)gc信息
6.jstat -gcnew <pid>:年輕代對(duì)象的信息。
7.jstat -gcnewcapacity<pid>: 年輕代對(duì)象的信息及其占用量。
8.jstat -gcold <pid>:old代對(duì)象的信息。
9.jstat -gcoldcapacity <pid>: old代對(duì)象的信息及其占用量。
10.jstat -gcpermcapacity<pid>: perm對(duì)象的信息及其占用量。
11.jstat -printcompilation <pid>:當(dāng)前VM執(zhí)行的信息。
監(jiān)視 Java 虛擬機(jī) (JVM),并使遠(yuǎn)程監(jiān)視工具能夠連接到 JVM
命令格式
jstatd -[option]
option
使用方法
1.在jdk的bin目錄下創(chuàng)建文件jstatd.all.policy
2.寫入下面的安全配置
grant codebase "file:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/lib/tools.jar" {
permission java.security.AllPermission;
};
#此處寫絕對(duì)路徑,主要是防止路徑錯(cuò)誤問(wèn)題,排查問(wèn)題,應(yīng)該寫成相對(duì)路徑
3.啟動(dòng)jstatd
./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=x.x.x.x &
4.使用jvisualvm工具遠(yuǎn)程連接,進(jìn)行監(jiān)控
VisualVM,能夠監(jiān)控線程,內(nèi)存情況,查看方法的CPU時(shí)間和內(nèi)存中的對(duì) 象,已被GC的對(duì)象,反向查看分配的堆棧(如100個(gè)String對(duì)象分別由哪幾個(gè)對(duì)象分配出來(lái)的).
同時(shí)他還提供很多插件可以自己安裝,是一款不錯(cuò)的監(jiān)控分析工具。
可以用來(lái)查看正在運(yùn)行的 java 應(yīng)用程序的擴(kuò)展參數(shù),包括Java System屬性和JVM命令行參數(shù);也可以動(dòng)態(tài)的修改正在運(yùn)行的 JVM 一些參數(shù)。當(dāng)系統(tǒng)崩潰時(shí),jinfo可以從core文件里面知道崩潰的Java應(yīng)用程序的配置信息
命令格式
參數(shù)說(shuō)明
option
Javacore 概述
Javacore,也可以稱為“threaddump”或是“javadump”,它是 Java 提供的一種診斷特性,能夠提供一份可讀的當(dāng)前運(yùn)行的 JVM 中線程使用情況的快照。即在某個(gè)特定時(shí)刻,JVM 中有哪些線程在運(yùn)行,每個(gè)線程執(zhí)行到哪一個(gè)類,哪一個(gè)方法。應(yīng)用程序如果出現(xiàn)不可恢復(fù)的錯(cuò)誤或是內(nèi)存泄露,就會(huì)自動(dòng)觸發(fā) Javacore 的生成。
使用方法
1.jinfo pid:輸出當(dāng)前 jvm 進(jìn)程的全部參數(shù)和系統(tǒng)屬性
2.jinfo -flag name pid:輸出對(duì)應(yīng)名稱的參數(shù)使用該命令,可以查看指定的 jvm 參數(shù)的值。如:查看當(dāng)前 jvm 進(jìn)程是否開(kāi)啟打印 GC 日志。
3.jinfo -flag [+|-]name pid:開(kāi)啟或者關(guān)閉對(duì)應(yīng)名稱的參數(shù)
使用 jinfo 可以在不重啟虛擬機(jī)的情況下,可以動(dòng)態(tài)的修改 jvm 的參數(shù)。尤其在線上的環(huán)境特別有用。
4.jinfo -flag name=value pid:修改指定參數(shù)的值。
注意:jinfo雖然可以在java程序運(yùn)行時(shí)動(dòng)態(tài)地修改虛擬機(jī)參數(shù),但并不是所有的參數(shù)都支持動(dòng)態(tài)修改
5.jinfo -flags pid:輸出全部的參數(shù)
6.jinfo -sysprops pid:輸出當(dāng)前 jvm 進(jìn)行的全部的系統(tǒng)屬性
主要是用來(lái)分析java堆的命令,可以將堆中的對(duì)象以html的形式顯示出來(lái),包括對(duì)象的數(shù)量,大小等等,并支持對(duì)象查詢語(yǔ)言。
jmap -dump:live,file=a.log pid
也可以使用下面方式導(dǎo)出堆文件
1、使用 jconsole 選項(xiàng)通過(guò) HotSpotDiagnosticMXBean 從運(yùn)行時(shí)獲得堆轉(zhuǎn)儲(chǔ)(生成dump文件)、
2、虛擬機(jī)啟動(dòng)時(shí)如果指定了 -XX:+HeapDumpOnOutOfMemoryError 選項(xiàng), 則在拋出 OutOfMemoryError 時(shí), 會(huì)自動(dòng)執(zhí)行堆轉(zhuǎn)儲(chǔ)。
3、使用 hprof 命令
jhat -J-Xmx512M a1.log
http://ip:7000/jhat中的OQL(對(duì)象查詢語(yǔ)言)
如果需要根據(jù)某些條件來(lái)過(guò)濾或查詢堆的對(duì)象,這是可能的,可以在jhat的html頁(yè)面中執(zhí)行OQL,來(lái)查詢符合條件的對(duì)象
基本語(yǔ)法:
select <javascript expression to select>
[from [instanceof] <class name> <identifier>]
[where <javascript boolean expression to filter>]
解釋:
(1)class name是java類的完全限定名,如:java.lang.String, java.util.ArrayList, C是char數(shù)組, java.io.File是java.io.File[]
(2)類的完全限定名不足以唯一的辨識(shí)一個(gè)類,因?yàn)椴煌?/span>ClassLoader載入的相同的類,它們?cè)趈vm中是不同類型的
(3)instanceof表示也查詢某一個(gè)類的子類,如果不明確instanceof,則只精確查詢class name指定的類
(4)from和where子句都是可選的
(5)java域表示:obj.field_name;java數(shù)組表示:array[index]
舉例:
(1)查詢長(zhǎng)度大于100的字符串
select s from java.lang.String s where s.count > 100
(2)查詢長(zhǎng)度大于256的數(shù)組
select a from [I a where a.length > 256
(3)顯示匹配某一正則表達(dá)式的字符串
select a.value.toString() from java.lang.String s where /java/(s.value.toString())
(4)顯示所有文件對(duì)象的文件路徑
select file.path.value.toString() from java.io.File file
(5)顯示所有ClassLoader的類名
select classof(cl).name from instanceof java.lang.ClassLoader cl
(6)通過(guò)引用查詢對(duì)象
select o from instanceof 0xd404d404 o
built-in對(duì)象 -- heap
(1)heap.findClass(class name) -- 找到類
select heap.findClass("java.lang.String").superclass
(2)heap.findObject(object id) -- 找到對(duì)象
select heap.findObject("0xd404d404")
(3)heap.classes -- 所有類的枚舉
select heap.classes
(4)heap.objects -- 所有對(duì)象的枚舉
select heap.objects("java.lang.String")
(5)heap.finalizables -- 等待垃圾收集的java對(duì)象的枚舉
(6)heap.livepaths -- 某一對(duì)象存活路徑
select heaplivepaths(s) from java.lang.String s
(7)heap.roots -- 堆根集的枚舉
辨識(shí)對(duì)象的函數(shù)
(1)classof(class name) -- 返回java對(duì)象的類對(duì)象
select classof(cl).name from instanceof java.lang.ClassLoader cl
(2)identical(object1,object2) -- 返回是否兩個(gè)對(duì)象是同一個(gè)實(shí)例
select identical(heap.findClass("java.lang.String").name, heap.findClass("java.lang.String").name)
(3)objectid(object) -- 返回對(duì)象的id
select objectid(s) from java.lang.String s
(4)reachables -- 返回可從對(duì)象可到達(dá)的對(duì)象
select reachables(p) from java.util.Properties p -- 查詢從Properties對(duì)象可到達(dá)的對(duì)象
select reachables(u, "java.net.URL.handler") from java.net.URL u -- 查詢從URL對(duì)象可到達(dá)的對(duì)象,但不包括從URL.handler可到達(dá)的對(duì)象
(5)referrers(object) -- 返回引用某一對(duì)象的對(duì)象
select referrers(s) from java.lang.String s where s.count > 100
(6)referees(object) -- 返回某一對(duì)象引用的對(duì)象
select referees(s) from java.lang.String s where s.count > 100
(7)refers(object1,object2) -- 返回是否第一個(gè)對(duì)象引用第二個(gè)對(duì)象
select refers(heap.findObject("0xd4d4d4d4"),heap.findObject("0xe4e4e4e4"))
(8)root(object) -- 返回是否對(duì)象是根集的成員
select root(heap.findObject("0xd4d4d4d4"))
(9)sizeof(object) -- 返回對(duì)象的大小
select sizeof(o) from [I o
(10)toHtml(object) -- 返回對(duì)象的html格式
select "<b>" + toHtml(o) + "</b>" from java.lang.Object o
(11)選擇多值
select {name:t.name?t.name.toString():"null",thread:t} from instanceof java.lang.Thread t
數(shù)組、迭代器等函數(shù)
(1)concat(enumeration1,enumeration2) -- 將數(shù)組或枚舉進(jìn)行連接
select concat(referrers(p),referrers(p)) from java.util.Properties p
(2)contains(array, expression) -- 數(shù)組中元素是否滿足某表達(dá)式
select p from java.util.Properties where contains(referres(p), "classof(it).name=='java.lang.Class'")
返回由java.lang.Class引用的java.util.Properties對(duì)象
(3)count(array, expression) -- 滿足某一條件的元素的數(shù)量
select count(heap.classes(), "/java.io./(it.name)")
(4)filter(array, expression) -- 過(guò)濾出滿足某一條件的元素
select filter(heap.classes(), "/java.io./(it.name)")
(5)length(array) -- 返回?cái)?shù)組長(zhǎng)度
select length(heap.classes())
(6)map(array,expression) -- 根據(jù)表達(dá)式對(duì)數(shù)組中的元素進(jìn)行轉(zhuǎn)換映射
select map(heap.classes(),"index + '-->' + toHtml(it)")
(7)max(array,expression) -- 最大值, min(array,expression)
select max(heap.objects("java.lang.String"),"lhs.count>rhs.count")
(8)sort(array,expression) -- 排序
select sort(heap.objects('[C'),'sizeof(lhs)-sizeof(rhs)')
(9)sum(array,expression) -- 求和
select sum(heap.objects('[C'),'sizeof(it)')
(10)toArray(array) -- 返回?cái)?shù)組
(11)unique(array) -- 唯一化數(shù)組
打印進(jìn)程、核心文件或遠(yuǎn)程調(diào)試服務(wù)器的共享對(duì)象內(nèi)存映射或堆內(nèi)存詳細(xì)信息。
jmap [option] <pid>
(to connect to running process) 連接到正在運(yùn)行的進(jìn)程
jmap [option] <executable <core>
(to connect to a core file) 連接到核心文件
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server) 連接到遠(yuǎn)程調(diào)試服務(wù)
option
使用方法
jstack命令主要用于調(diào)試java程序運(yùn)行過(guò)程中的線程堆棧信息,可以用于檢測(cè)死鎖,進(jìn)程耗用cpu過(guò)高報(bào)警問(wèn)題的排查。jstack命令會(huì)打印出所有的線程,包括用戶自己?jiǎn)?dòng)的線程和jvm后臺(tái)線程。
命令格式
jstack -[option] pid
option
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。