java監控,Java監控數據庫中數據變動時觸發

本文目錄一覽:

Java 如何監控文件目錄的變化

JavaSE 1.7提供了相關的API,去監視文件或者文件夾的變動,主要的API都在java.nio.file下面,其大概流程如下:

package org.xdemo.superutil.j2se.filewatch;

 

import static java.nio.file.LinkOption.NOFOLLOW_LINKS;

 

import java.io.File;

import java.io.IOException;

import java.nio.file.FileSystems;

import java.nio.file.FileVisitResult;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.SimpleFileVisitor;

import java.nio.file.StandardWatchEventKinds;

import java.nio.file.WatchEvent;

import java.nio.file.WatchEvent.Kind;

import java.nio.file.WatchKey;

import java.nio.file.WatchService;

import java.nio.file.attribute.BasicFileAttributes;

import java.util.HashMap;

import java.util.Map;

 

/**

 * 文件夾監控

 * 

 * @author Goofy a href=””;/a

 * @Date 2015年7月3日 上午9:21:33

 */

public class WatchDir {

 

    private final WatchService watcher;

    private final MapWatchKey, Path keys;

    private final boolean subDir;

 

    /**

     * 構造方法

     * 

     * @param file

     *            文件目錄,不可以是文件

     * @param subDir

     * @throws Exception

     */

    public WatchDir(File file, boolean subDir, FileActionCallback callback) throws Exception {

        if (!file.isDirectory())

            throw new Exception(file.getAbsolutePath() + “is not a directory!”);

 

        this.watcher = FileSystems.getDefault().newWatchService();

        this.keys = new HashMapWatchKey, Path();

        this.subDir = subDir;

 

        Path dir = Paths.get(file.getAbsolutePath());

 

        if (subDir) {

            registerAll(dir);

        } else {

            register(dir);

        }

        processEvents(callback);

    }

 

    @SuppressWarnings(“unchecked”)

    static T WatchEventT cast(WatchEvent? event) {

        return (WatchEventT) event;

    }

 

    /**

     * 觀察指定的目錄

     * 

     * @param dir

     * @throws IOException

     */

    private void register(Path dir) throws IOException {

        WatchKey key = dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

        keys.put(key, dir);

    }

 

    /**

     * 觀察指定的目錄,並且包括子目錄

     */

    private void registerAll(final Path start) throws IOException {

        Files.walkFileTree(start, new SimpleFileVisitorPath() {

            @Override

            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {

                register(dir);

                return FileVisitResult.CONTINUE;

            }

        });

    }

 

    /**

     * 發生文件變化的回調函數

     */

    @SuppressWarnings(“rawtypes”)

    void processEvents(FileActionCallback callback) {

        for (;;) {

            WatchKey key;

            try {

                key = watcher.take();

            } catch (InterruptedException x) {

                return;

            }

            Path dir = keys.get(key);

            if (dir == null) {

                System.err.println(“操作未識別”);

                continue;

            }

 

            for (WatchEvent? event : key.pollEvents()) {

                Kind kind = event.kind();

 

                // 事件可能丟失或遺棄

                if (kind == StandardWatchEventKinds.OVERFLOW) {

                    continue;

                }

 

                // 目錄內的變化可能是文件或者目錄

                WatchEventPath ev = cast(event);

                Path name = ev.context();

                Path child = dir.resolve(name);

                File file = child.toFile();

                if (kind.name().equals(FileAction.DELETE.getValue())) {

                    callback.delete(file);

                } else if (kind.name().equals(FileAction.CREATE.getValue())) {

                    callback.create(file);

                } else if (kind.name().equals(FileAction.MODIFY.getValue())) {

                    callback.modify(file);

                } else {

                    continue;

                }

 

                // if directory is created, and watching recursively, then

                // register it and its sub-directories

                if (subDir  (kind == StandardWatchEventKinds.ENTRY_CREATE)) {

                    try {

                        if (Files.isDirectory(child, NOFOLLOW_LINKS)) {

                            registerAll(child);

                        }

                    } catch (IOException x) {

                        // ignore to keep sample readbale

                    }

                }

            }

 

            boolean valid = key.reset();

            if (!valid) {

                // 移除不可訪問的目錄

                // 因為有可能目錄被移除,就會無法訪問

                keys.remove(key);

                // 如果待監控的目錄都不存在了,就中斷執行

                if (keys.isEmpty()) {

                    break;

                }

            }

        }

    }

 

}

Java監控一個進程的執行狀態

應用程序很高興對所有這些活動一無所知。它只知道自己的虛擬地址空間。但是,如果當前在主存中的頁面集(稱為 駐留集)少於實際要使用的頁面集(稱為 工作集),應用程序的性能很快就會顯著降低。(不幸的是,本文中您將看到,我們要討論的工具常常交換使用這兩個術語,儘管它們指的是完全不同的事物。)Task Manager 和 PerfMon我們首先考察兩種最常見的工具:Task Manager 和 PerfMon。這兩個工具都隨 Windows 一起提供,因此由此起步比較容易。Task ManagerTask Manager 是一種非常見的 Windows 進程監控程序。您可以通過熟悉的 Ctrl-Alt-Delete 組合鍵來啟動它,或者右擊任務欄。Processes 選項卡顯示了最詳細的信息,如圖 2 所示。圖 2. Task Manager 進程選項卡圖 2 中顯示的列已經通過選擇 View — Select Columns 作了調整。有些列標題非常含糊,但可以在 Task Manager 幫助中找到各列的定義。和進程內存使用情況關係最密切的計數器包括:Mem Usage(內存使用):在線幫助將其稱為進程的工作集(儘管很多人稱之為駐留集)——當前在主存中的頁面集。但是這個數值包含能夠和其他進程共享的頁面,因此要注意避免重複計算。比方說,如果要計算共享同一個 DLL 的兩個進程的總內存佔用情況,不能簡單地把「內存使用」值相加。Peak Mem Usage(內存使用高峰值):進程啟動以來 Mem Usage(內存使用)字段的最大值。Page Faults(頁面錯誤):進程啟動以來要訪問的頁面不在主存中的總次數。VM Size(虛擬內存大小):聯機幫助將其稱為「分配給進程私有虛擬內存總數。」更確切地說,這是進程所 提交的內存。如果進程保留內存而沒有提交,那麼該值就與總地址空間的大小有很大的差別。雖然 Windows 文檔將 Mem Usage(內存使用)稱為工作集,但在該上下文中,它實際上指的是很多人所說的駐留集(resident set),明白這一點很重要。您可以在 Memory Management Reference 術語表(請參閱 參考資料)中找到這些術語的定義。 工作集 更通常的含義指的是一個邏輯概念,即在某一點上為了避免分頁操作,進程需要駐留在內存中的那些頁面。PerfMon隨 Windows 一起提供的另一種 Microsoft 工具是 PerfMon,它監控各種各樣的計數器,從打印隊列到電話。PerfMon 通常在系統路徑中,因此可以在命令行中輸入 perfmon 來啟動它。這個工具的優點是以圖形化的方式顯示計數器,很容易看到計數器隨時間的變化情況。請在 PerfMon 窗口上方的工具欄中單擊 + 按鈕,這樣會打開一個對話框讓您選擇要監控的計數器,如圖 3a 所示。計數器按照 性能對象分成不同的類別。與內存使用關係最密切的兩個類是 Memory 和 Process。選中計數器然後單擊 Explain 按鈕,就可以看到計數器的定義。說明出現在主對話框下方彈出的單獨的窗口中。

java如何監控線程是否在運行

判斷是否在運行用isAlive方法哈。。

給你寫了個例子。。不知是不是你想要的。。

public class Thread100 {

/**

* @param args

*/

public static ThreadA ta = new ThreadA();

public static ThreadB tb = new ThreadB();

public static void main(String[] args) {

ta.start();

tb.start();

}

}

class ThreadA extends Thread {

@Override

public void run() {

int i = 0;

while(i 100) {

if(Thread100.tb.isAlive()) {

System.out.println(“B is alive”);

}

System.out.println(i);

i++;

}

}

}

class ThreadB extends Thread {

@Override

public void run() {

int i = 0;

while(i 100) {

if(Thread100.ta.isAlive()) {

System.out.println(“A is alive”);

}

System.out.println(i);

i++;

}

}

}

java遠程監控連不上

客戶端無法建立跟遠程計算機的連接。

導致這個錯誤的可能的原因是:

1) 遠程計算機上的遠程連接可能沒有啟用。

2) 已超出遠程計算機上的連接最大數。

3) 建立連接時出現了一個網絡錯誤。

具體的解決辦法:

有時候是這個錯誤提示:由於網絡錯誤,連接被中斷,請重新連接到遠程計算機

遠程連接我肯定是開啟了的,防火牆裏面3389端口也是打開的,並且連接其他的服務器就可以連接上,說明我本機沒問題,用掃描軟件,掃描了一下這個服務器,顯示IP和端口都是存在的,說明這個服務器網絡也沒問題,實在沒辦法,只有不斷的測試,後來在系統日誌裏面看到很多條系統錯誤信息。其中:嚴重錯誤「RDP 協議組件 “DATA ENCRYPTION” 在協議流中發現一個錯誤並且中斷了客戶端連接。」引起了我的主要。

Java類應用監控應該監控哪些

當有問題出現時,許多開發人員可能會比較盲目的用這些工具來試探性定位問題,而大多數情況下,這種試探會無功而返。因為這些分析工具主要是側重Java單方面的分析,比如該系統調用第三方API,如果第三方API有問題,是無法監控到的。還有像文件、DB資源的訪問也是是無法監控到的。

除了JAVA自帶的監控工具外,我們嘗試了第三方的監控工具透視寶,功能相對全面,且易操作。

在功能方面,透視寶都包括:查看執行最慢的10個元素,包括元素執行次數、持續時長和佔用時長百分比;查看HTTP請求參數,包括請求的響應狀態、鏈接頁面、具體的請求參數及返回結果;查看代碼執行堆棧的詳細樹狀信息,包括每個方法的計算時間、總耗時和被調用的次數,您能直接看到特殊標識的最慢方法;查看涉及SQL語句的總耗時排序,包括SQL執行總耗時、執行次數和具體的查詢語句;第三方API調用。

JAVA怎麼監控一個對象變量是否修改

可以通過覆寫Object類中的equals(Object obj)方法和hashCode()方法,這兩個方法是專門用來比較兩個對象是否相等的,假如你原來的類裏面有兩個屬性 name和age,那麼這段代碼就如下所示:

class Student{ String name; int age; public Student(String name,int age){ this.name = name; this.age = age; } public boolean equals(Object obj){ if(this == obj){ return true; } if(!(obj instanceof Student)){ return false; } Student student = (Student)obj; if(this.name.equals(student.name) this.age==student.age){ return true; } else{ return false; } } public int hashCode(){ return this.name.hashCode()*this.age; }}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/303895.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:50
下一篇 2024-12-31 12:09

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29

發表回復

登錄後才能評論