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遠程監控連不上

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

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

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

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

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

具體的解決辦法:

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

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

如何監控java cpu使用率

1、確定當前系統安裝的jdk是1.6版本以上

2、windows系統中有獲取cpu使用率的可執行文件exe,只要在java中獲取該文件的執行路徑,通過Java調用即可。

3、獲取操作系統可執行文件目錄procCmd

4、調用java的Runtime.getRuntime().exec執行cmd應用程序

5、利用java中sleep來計算睡眠前後cpu的忙碌時間與空閑時間,因為sleep不會釋放系統資源

6、根據忙碌時間佔總時間的比例來計算cpu使用率!

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 按鈕,就可以看到計數器的定義。說明出現在主對話框下方彈出的單獨的窗口中。

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

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

相關推薦

發表回復

登錄後才能評論