最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux調(diào)整系統(tǒng)最大文件打開數(shù)限制的實(shí)戰(zhàn)指南

 更新時(shí)間:2026年04月24日 08:49:01   作者:知遠(yuǎn)漫談  
在現(xiàn)代高并發(fā)服務(wù)架構(gòu)中,Linux系統(tǒng)的文件描述符(File Descriptor)管理能力直接決定了應(yīng)用的穩(wěn)定性和吞吐量,本文將帶你深入理解Linux文件描述符機(jī)制,手把手教你如何正確調(diào)整系統(tǒng)最大文件打開數(shù)限制,并結(jié)合真實(shí)Java代碼示例,讓你的應(yīng)用穩(wěn)如泰山

引言

在現(xiàn)代高并發(fā)服務(wù)架構(gòu)中,Linux系統(tǒng)的文件描述符(File Descriptor)管理能力直接決定了應(yīng)用的穩(wěn)定性和吞吐量。特別是對(duì)于Java應(yīng)用而言——無論是Tomcat、Netty、Spring Boot還是自研RPC框架——一旦遭遇“Too many open files”錯(cuò)誤,輕則請(qǐng)求失敗,重則服務(wù)崩潰。本文將帶你深入理解Linux文件描述符機(jī)制,手把手教你如何正確調(diào)整系統(tǒng)最大文件打開數(shù)限制,并結(jié)合真實(shí)Java代碼示例,讓你的應(yīng)用穩(wěn)如泰山!

什么是文件描述符?為什么它如此重要?

在Linux系統(tǒng)中,一切皆文件(Everything is a file)。這不僅包括普通文件、目錄,還包括網(wǎng)絡(luò)套接字(Socket)、管道(Pipe)、設(shè)備等。每當(dāng)一個(gè)進(jìn)程打開一個(gè)“文件”,內(nèi)核就會(huì)為其分配一個(gè)文件描述符(File Descriptor, FD),它本質(zhì)上是一個(gè)非負(fù)整數(shù),用于標(biāo)識(shí)該進(jìn)程所打開的資源。

// 示例:Java中打開一個(gè)Socket連接,會(huì)占用一個(gè)FD
Socket socket = new Socket("example.com", 80);
// 此時(shí)系統(tǒng)為該Java進(jìn)程分配了一個(gè)新的文件描述符

文件描述符是有限資源。每個(gè)進(jìn)程默認(rèn)只能打開1024個(gè)文件描述符(具體值因發(fā)行版而異)。對(duì)于高并發(fā)Java服務(wù),比如一個(gè)Web服務(wù)器同時(shí)處理數(shù)千個(gè)HTTP連接,很容易就達(dá)到上限。

當(dāng)你看到 java.io.IOException: Too many open files 異常時(shí),就是系統(tǒng)在告訴你:“兄弟,你的FD用完了!”

文件描述符使用情況可視化分析

讓我們先通過一個(gè)簡(jiǎn)單的mermaid圖表,直觀理解文件描述符在系統(tǒng)中的層級(jí)結(jié)構(gòu):

這個(gè)圖展示了從系統(tǒng)全局限制到單個(gè)Java線程所持FD的層級(jí)關(guān)系。接下來我們將逐層剖析并提供調(diào)優(yōu)方案。

如何查看當(dāng)前系統(tǒng)的FD限制?

在動(dòng)手調(diào)整之前,我們首先要學(xué)會(huì)“診斷”。以下是幾個(gè)關(guān)鍵命令:

查看系統(tǒng)級(jí)最大文件數(shù)限制

cat /proc/sys/fs/file-max
# 輸出示例:3263487

這個(gè)值表示整個(gè)系統(tǒng)允許打開的最大文件描述符總數(shù)。

查看當(dāng)前用戶的軟硬限制

ulimit -Sn   # 軟限制(soft limit)
ulimit -Hn   # 硬限制(hard limit)

軟限制是實(shí)際生效的限制,硬限制是軟限制的上限。普通用戶只能在軟限制范圍內(nèi)調(diào)整,要突破硬限制需要root權(quán)限。

查看某Java進(jìn)程當(dāng)前使用的FD數(shù)量

假設(shè)你的Java進(jìn)程PID是12345:

ls -l /proc/12345/fd | wc -l
# 或者更精確地:
lsof -p 12345 | wc -l

實(shí)時(shí)監(jiān)控系統(tǒng)FD使用總量

cat /proc/sys/fs/file-nr
# 輸出三個(gè)數(shù)字:已分配FD數(shù) 已分配但未使用FD數(shù) 系統(tǒng)最大FD數(shù)

四步走:永久調(diào)整系統(tǒng)FD限制

調(diào)整分為兩個(gè)層面:系統(tǒng)全局配置用戶/進(jìn)程級(jí)配置。我們推薦兩者結(jié)合,確保萬無一失。

第一步:修改系統(tǒng)級(jí)最大文件數(shù)(需root)

編輯 /etc/sysctl.conf

sudo vim /etc/sysctl.conf

添加或修改以下行:

fs.file-max = 10000000

然后執(zhí)行:

sudo sysctl -p

立即生效,無需重啟。

建議設(shè)置為物理內(nèi)存KB數(shù)的1~2倍。例如32GB內(nèi)存 → 3210241024 ≈ 3355萬,這里設(shè)1000萬是保守且安全的。

第二步:修改用戶級(jí)軟硬限制(需root)

編輯 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

在文件末尾添加(假設(shè)運(yùn)行Java的是 appuser 用戶):

appuser soft nofile 65536
appuser hard nofile 65536
* soft nofile 65536
* hard nofile 65536

* 表示對(duì)所有用戶生效。如果你知道確切用戶名,建議指定,避免影響系統(tǒng)其他服務(wù)。

注意:某些系統(tǒng)(如Ubuntu)可能還需要修改 /etc/systemd/system.conf/etc/systemd/user.conf 中的 DefaultLimitNOFILE

第三步:為systemd服務(wù)單獨(dú)配置(如Java以服務(wù)方式運(yùn)行)

如果你的Java應(yīng)用是通過systemd啟動(dòng)的(如 systemctl start myapp),還需額外配置:

創(chuàng)建或編輯服務(wù)覆蓋文件:

sudo systemctl edit my-java-app.service

添加:

[Service]
LimitNOFILE=65536

然后重新加載并重啟服務(wù):

sudo systemctl daemon-reload
sudo systemctl restart my-java-app.service

第四步:驗(yàn)證配置是否生效

重啟終端或重新登錄用戶后,執(zhí)行:

ulimit -n
# 應(yīng)輸出 65536

# 啟動(dòng)Java程序后,檢查其FD限制
cat /proc/$(pgrep -f YourMainClass)/limits | grep "Max open files"

如果顯示 65536,恭喜你,配置成功!

Java代碼實(shí)戰(zhàn):模擬高并發(fā)場(chǎng)景下的FD耗盡與優(yōu)化

下面我們編寫一個(gè)Java程序,模擬在未調(diào)整FD限制的情況下,如何快速觸發(fā)“Too many open files”錯(cuò)誤;然后再展示優(yōu)化后的健壯版本。

錯(cuò)誤示范:不關(guān)閉資源導(dǎo)致FD泄漏

import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BadClient {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newFixedThreadPool(100);
        // 模擬發(fā)起大量連接,但不關(guān)閉Socket
        for (int i = 0; i < 2000; i++) {
            final int id = i;
            executor.submit(() -> {
                try {
                    Socket socket = new Socket("httpbin.org", 80);
                    System.out.println("Client " + id + " connected. FD used.");
                    // 故意不關(guān)閉socket!模擬資源泄漏
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        }
        executor.shutdown();
        while (!executor.isTerminated()) {
            Thread.sleep(100);
        }
    }
}

運(yùn)行此程序,你很快會(huì)看到:

java.net.SocketException: Too many open files
	at java.base/java.net.Socket.createImpl(Socket.java:462)
	at java.base/java.net.Socket.getImpl(Socket.java:522)
	at java.base/java.net.Socket.getOutputStream(Socket.java:944)
	...

這就是典型的FD耗盡異常!

正確做法:使用try-with-resources自動(dòng)關(guān)閉

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class GoodClient {
    private static final AtomicInteger successCount = new AtomicInteger(0);
    private static final AtomicInteger errorCount = new AtomicInteger(0);
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newFixedThreadPool(200);
        for (int i = 0; i < 10000; i++) { // 嘗試1萬個(gè)連接
            final int id = i;
            executor.submit(() -> {
                try {
                    // 使用 try-with-resources 自動(dòng)關(guān)閉資源
                    try (Socket socket = new Socket("httpbin.org", 80);
                         PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
                        out.println("GET / HTTP/1.1");
                        out.println("Host: httpbin.org");
                        out.println("Connection: close");
                        out.println();
                        String line;
                        while ((line = in.readLine()) != null) {
                            // 只讀一行響應(yīng)頭即可
                            if (line.isEmpty()) break;
                        }
                        int count = successCount.incrementAndGet();
                        if (count % 1000 == 0) {
                            System.out.println("? 成功完成 " + count + " 次連接");
                        }
                    }
                } catch (Exception e) {
                    int count = errorCount.incrementAndGet();
                    if (count <= 10) { // 只打印前10個(gè)錯(cuò)誤
                        System.err.println("? Client " + id + " failed: " + e.getMessage());
                    }
                }
            });
        }
        executor.shutdown();
        while (!executor.isTerminated()) {
            Thread.sleep(100);
        }
        System.out.println("\n?? 最終統(tǒng)計(jì):成功=" + successCount.get() + ", 失敗=" + errorCount.get());
    }
}

這段代碼的關(guān)鍵改進(jìn):

  • ? 使用 try-with-resources 語法確保Socket和流被自動(dòng)關(guān)閉。
  • ? 控制并發(fā)線程數(shù)(200),避免瞬間沖擊。
  • ? 添加計(jì)數(shù)器和日志,便于觀察執(zhí)行狀態(tài)。

即使你將循環(huán)次數(shù)提高到10萬次,只要系統(tǒng)FD限制足夠(我們前面已設(shè)為65536),程序也能穩(wěn)定運(yùn)行!

連接池優(yōu)化:進(jìn)一步減少FD開銷

對(duì)于生產(chǎn)環(huán)境,我們不應(yīng)每次都新建Socket連接。推薦使用連接池技術(shù),復(fù)用已有連接。

下面是一個(gè)基于Apache HttpClient的連接池示例:

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class PooledHttpClientExample {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建連接池管理器
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(1000); // 最大總連接數(shù)
        cm.setDefaultMaxPerRoute(200); // 每個(gè)路由默認(rèn)最大連接數(shù)
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(cm)
                .build();
        ExecutorService executor = Executors.newFixedThreadPool(50);
        AtomicInteger counter = new AtomicInteger(0);
        for (int i = 0; i < 5000; i++) {
            executor.submit(() -> {
                try {
                    HttpGet request = new HttpGet("https://httpbin.org/get");
                    try (CloseableHttpResponse response = httpClient.execute(request)) {
                        HttpEntity entity = response.getEntity();
                        if (entity != null) {
                            String result = EntityUtils.toString(entity);
                            // System.out.println(result.substring(0, 50) + "...");
                        }
                        int c = counter.incrementAndGet();
                        if (c % 500 == 0) {
                            System.out.println("? 完成第 " + c + " 次請(qǐng)求");
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        }
        executor.shutdown();
        while (!executor.isTerminated()) {
            Thread.sleep(100);
        }
        httpClient.close(); // 關(guān)閉連接池
        System.out.println("?? 所有請(qǐng)求完成!");
    }
}

在這個(gè)例子中:

  • 我們只創(chuàng)建了最多1000個(gè)TCP連接(由連接池管理),而不是5000個(gè)。
  • 連接被多個(gè)線程復(fù)用,極大減少了FD的創(chuàng)建與銷毀開銷。
  • 即使請(qǐng)求數(shù)很大,F(xiàn)D使用量也保持平穩(wěn)。

生產(chǎn)建議:對(duì)于數(shù)據(jù)庫(kù)連接、Redis客戶端、HTTP客戶端等,務(wù)必使用成熟的連接池庫(kù)(如HikariCP、JedisPool、OkHttp等)。

監(jiān)控與告警:防患于未然

調(diào)整完系統(tǒng)參數(shù)只是第一步。我們還需要建立監(jiān)控機(jī)制,提前發(fā)現(xiàn)FD使用異常。

方法一:Shell腳本監(jiān)控

#!/bin/bash
# check_fd.sh

PID=$1
WARN_THRESHOLD=50000
CRIT_THRESHOLD=60000

if [ -z "$PID" ]; then
    echo "Usage: $0 <pid>"
    exit 1
fi

if ! kill -0 $PID 2>/dev/null; then
    echo "? PID $PID 不存在或無權(quán)限訪問"
    exit 2
fi

FD_COUNT=$(ls -l /proc/$PID/fd 2>/dev/null | wc -l)

echo "?? 進(jìn)程 $PID 當(dāng)前FD數(shù)量: $FD_COUNT"

if [ $FD_COUNT -gt $CRIT_THRESHOLD ]; then
    echo "?? CRITICAL: FD數(shù)量超過閾值 $CRIT_THRESHOLD"
    exit 2
elif [ $FD_COUNT -gt $WARN_THRESHOLD ]; then
    echo "?? WARNING: FD數(shù)量接近閾值 $WARN_THRESHOLD"
    exit 1
else
    echo "? OK: FD使用正常"
    exit 0
fi

配合cron定時(shí)任務(wù)或Prometheus Node Exporter使用,實(shí)現(xiàn)自動(dòng)化監(jiān)控。

方法二:Java內(nèi)置監(jiān)控(JMX)

我們也可以在Java程序內(nèi)部暴露FD使用指標(biāo):

import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Paths;
public class FDUsageMonitor implements Runnable {
    private final String processName;
    public FDUsageMonitor(String name) {
        this.processName = name;
    }
    @Override
    public void run() {
        try {
            long pid = ProcessHandle.current().pid();
            String fdPath = "/proc/" + pid + "/fd";
            long fdCount = Files.list(Paths.get(fdPath)).count();
            OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
            double loadAvg = getSystemLoadAverage(osBean);
            System.out.printf(
                "[%s] PID=%d, FD=%d, Load=%.2f%n",
                processName, pid, fdCount, loadAvg
            );
            // 如果FD超過閾值,記錄日志或發(fā)送告警
            if (fdCount > 50000) {
                System.err.println("?? FD使用過高!考慮擴(kuò)容或排查泄漏");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private double getSystemLoadAverage(OperatingSystemMXBean osBean) {
        try {
            Method method = osBean.getClass().getMethod("getSystemLoadAverage");
            return (double) method.invoke(osBean);
        } catch (Exception e) {
            return -1.0;
        }
    }
    public static void main(String[] args) throws InterruptedException {
        FDUsageMonitor monitor = new FDUsageMonitor("MyApp");
        // 每10秒打印一次
        while (true) {
            monitor.run();
            Thread.sleep(10000);
        }
    }
}

將此類集成到你的應(yīng)用中,可以實(shí)時(shí)掌握FD使用趨勢(shì)。

高級(jí)話題:容器環(huán)境下的FD限制

如今很多Java應(yīng)用運(yùn)行在Docker或Kubernetes中。容器環(huán)境有自己的一套限制機(jī)制。

Docker中設(shè)置ulimit

# Dockerfile
FROM openjdk:17-jdk-slim

COPY app.jar /app.jar

# 設(shè)置容器內(nèi)ulimit
CMD ["sh", "-c", "ulimit -n 65536 && java -jar /app.jar"]

或者在運(yùn)行時(shí)指定:

docker run --ulimit nofile=65536:65536 my-java-app

Kubernetes Pod級(jí)別設(shè)置

apiVersion: v1
kind: Pod
metadata:
  name: java-app-pod
spec:
  containers:
  - name: java-app
    image: my-java-app:latest
    resources:
      limits:
        memory: "2Gi"
        cpu: "1"
    securityContext:
      runAsUser: 1000
  # 設(shè)置Pod級(jí)別的ulimit(需啟用特性門控)
  # 注:原生K8s不直接支持ulimit,通常通過initContainer或宿主機(jī)配置解決

在K8s中,更常見的做法是在Node節(jié)點(diǎn)上預(yù)先配置好ulimit,或使用特權(quán)容器執(zhí)行sysctl調(diào)整。

壓力測(cè)試:驗(yàn)證你的調(diào)優(yōu)成果

使用Apache Bench (ab) 或 wrk 對(duì)你的Java服務(wù)進(jìn)行壓力測(cè)試:

# 安裝ab(Ubuntu)
sudo apt install apache2-utils

# 發(fā)起10萬請(qǐng)求,1000并發(fā)
ab -n 100000 -c 1000 http://localhost:8080/api/health

同時(shí)在另一個(gè)終端監(jiān)控FD使用:

watch -n 1 'ls -l /proc/$(pgrep -f YourApp)/fd 2>/dev/null | wc -l'

你應(yīng)該能看到FD數(shù)量在某個(gè)穩(wěn)定值上下波動(dòng),而不是持續(xù)增長(zhǎng)——這說明連接被正確復(fù)用和釋放。

故障排查清單

當(dāng)遇到“Too many open files”時(shí),請(qǐng)按以下順序排查:

  1. ? 是否已按本文方法調(diào)整系統(tǒng)和用戶級(jí)ulimit?
  2. ? Java進(jìn)程是否繼承了正確的limit?(檢查 /proc/<pid>/limits
  3. ? 是否存在資源泄漏?(Socket、FileInputStream、ResultSet等未關(guān)閉)
  4. ? 是否使用了連接池?連接池大小是否合理?
  5. ? 是否有第三方庫(kù)或中間件(如Log4j、數(shù)據(jù)庫(kù)驅(qū)動(dòng))導(dǎo)致FD泄漏?
  6. ? 是否在容器環(huán)境中?容器是否繼承了宿主機(jī)的ulimit?
  7. ? 是否達(dá)到系統(tǒng)級(jí) fs.file-max 上限?(cat /proc/sys/fs/file-nr

學(xué)習(xí)延伸:深入理解Linux資源限制機(jī)制

Linux的資源限制功能由PAM(Pluggable Authentication Modules)模塊 pam_limits.so 實(shí)現(xiàn)。當(dāng)你登錄系統(tǒng)時(shí),該模塊會(huì)讀取 /etc/security/limits.conf 并應(yīng)用相應(yīng)限制。

此外,還有 prlimit 命令可以動(dòng)態(tài)調(diào)整運(yùn)行中進(jìn)程的限制:

# 查看某進(jìn)程的FD限制
prlimit --pid 12345 --nofile

# 動(dòng)態(tài)調(diào)整(需權(quán)限)
sudo prlimit --pid 12345 --nofile=65536:65536

這對(duì)于線上緊急擴(kuò)容非常有用!

總結(jié):穩(wěn)健之道,在于未雨綢繆

文件描述符雖小,卻關(guān)乎服務(wù)生死。作為Java開發(fā)者,我們不僅要寫好業(yè)務(wù)代碼,更要理解底層系統(tǒng)機(jī)制。通過本文的學(xué)習(xí),你應(yīng)該已經(jīng)掌握:

  • ? Linux FD的基本概念與重要性
  • ? 如何查看和調(diào)整系統(tǒng)/用戶級(jí)FD限制
  • ? Java中正確管理資源的最佳實(shí)踐
  • ? 使用連接池降低FD開銷
  • ? 監(jiān)控與告警機(jī)制的建立
  • ? 容器環(huán)境下的特殊考量

記住:不要等到線上故障才想起調(diào)優(yōu)! 在項(xiàng)目初期就做好容量規(guī)劃和系統(tǒng)配置,才能讓你的服務(wù)在流量洪峰中屹立不倒。

附錄:完整配置參考模板

/etc/sysctl.conf

# 最大文件描述符總數(shù)
fs.file-max = 10000000

# 網(wǎng)絡(luò)相關(guān)優(yōu)化(可選)
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

/etc/security/limits.conf

# Java應(yīng)用用戶
appuser soft nofile 65536
appuser hard nofile 65536

# 所有用戶
* soft nofile 65536
* hard nofile 65536

# root用戶
root soft nofile 65536
root hard nofile 65536

systemd服務(wù)配置(/etc/systemd/system/myapp.service.d/override.conf)

[Service]
LimitNOFILE=65536
User=appuser
Group=appuser

常見問題解答(FAQ)

Q:為什么我改了limits.conf但Java進(jìn)程還是1024?
A:很可能是因?yàn)槟阃ㄟ^SSH登錄后沒有重新登錄,或者Java是通過systemd啟動(dòng)的。請(qǐng)確認(rèn)使用 su - username 完全切換用戶,或配置systemd服務(wù)限制。

Q:設(shè)置太大會(huì)不會(huì)浪費(fèi)內(nèi)存?
A:不會(huì)。FD限制只是“上限”,實(shí)際內(nèi)存消耗取決于真正打開的文件數(shù)量。內(nèi)核按需分配數(shù)據(jù)結(jié)構(gòu)。

Q:Docker容器內(nèi)如何永久生效?
A:在Dockerfile中使用 RUN ulimit -n 65536 是無效的,因?yàn)閡limit是shell內(nèi)置命令。應(yīng)在啟動(dòng)命令中設(shè)置,或構(gòu)建基礎(chǔ)鏡像時(shí)修改 /etc/security/limits.conf。

Q:Java有沒有辦法在代碼里設(shè)置ulimit?
A:不能。ulimit是進(jìn)程級(jí)別的系統(tǒng)調(diào)用,必須在JVM啟動(dòng)前由父進(jìn)程設(shè)置。Java程序無法自行提升限制。

彩蛋:一鍵檢測(cè)腳本

保存以下腳本為 fd-check.sh,一鍵診斷你的系統(tǒng)和Java進(jìn)程:

#!/bin/bash
echo "?? 開始FD健康檢查..."

echo "1. 系統(tǒng)最大FD數(shù):"
cat /proc/sys/fs/file-max

echo "2. 當(dāng)前用戶FD限制:"
ulimit -Sn
ulimit -Hn

echo "3. 系統(tǒng)當(dāng)前FD使用情況:"
cat /proc/sys/fs/file-nr

JAVA_PID=$(pgrep -f "java.*YourMainClass" | head -1)
if [ ! -z "$JAVA_PID" ]; then
    echo "4. Java進(jìn)程(PID=$JAVA_PID) FD限制:"
    cat /proc/$JAVA_PID/limits | grep "open files"

    echo "5. Java進(jìn)程當(dāng)前FD數(shù)量:"
    ls -l /proc/$JAVA_PID/fd 2>/dev/null | wc -l
else
    echo "?? 未找到Java進(jìn)程,請(qǐng)手動(dòng)指定PID"
fi

echo "? 檢查完畢。"

至此,你已掌握Linux文件描述符調(diào)優(yōu)的全套技能!快去給你的Java服務(wù)加上這層“防護(hù)甲”吧!?????

編程不僅是邏輯的藝術(shù),更是與操作系統(tǒng)共舞的哲學(xué)。愿你的每一行代碼,都能在堅(jiān)實(shí)的系統(tǒng)基石上,綻放光彩。

以上就是Linux調(diào)整系統(tǒng)最大文件打開數(shù)限制的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Linux調(diào)整最大文件打開數(shù)限制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Linux之如何設(shè)置CPU Performance模式

    Linux之如何設(shè)置CPU Performance模式

    這篇文章主要介紹了Linux之如何設(shè)置CPU Performance模式問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • linux如何將sda分區(qū)擴(kuò)容

    linux如何將sda分區(qū)擴(kuò)容

    這篇文章主要介紹了linux如何將sda分區(qū)擴(kuò)容問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Linux Shell echo命令/printf命令/test命令使用及說明

    Linux Shell echo命令/printf命令/test命令使用及說明

    本文介紹了Linux常用的echo、printf和test命令的用法和功能,對(duì)字符串輸出、格式化顯示以及條件測(cè)試進(jìn)行了簡(jiǎn)明講解,并提供了相關(guān)示例,適合腳本編寫參考
    2025-10-10
  • 詳解在Linux中怎么使用cron計(jì)劃任務(wù)

    詳解在Linux中怎么使用cron計(jì)劃任務(wù)

    本篇文章主要介紹了在Linux中怎么使用cron計(jì)劃任務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Linux中部署MeterSphere實(shí)現(xiàn)遠(yuǎn)程訪問

    Linux中部署MeterSphere實(shí)現(xiàn)遠(yuǎn)程訪問

    MeterSphere是一站式開源持續(xù)測(cè)試平臺(tái), 涵蓋測(cè)試跟蹤、接口測(cè)試、UI 測(cè)試和性能測(cè)試等功能,全面兼容 JMeter、Selenium 等主流開源標(biāo)準(zhǔn),有效助力開發(fā)和測(cè)試團(tuán)隊(duì)充分利用云彈性進(jìn)行高度可擴(kuò)展的自動(dòng)化測(cè)試,
    本文介紹Linux中部署MeterSphere實(shí)現(xiàn)遠(yuǎn)程訪問MeterSphere界面
    2023-10-10
  • Linux如何定時(shí)刪除7天前的日志文件

    Linux如何定時(shí)刪除7天前的日志文件

    這篇文章主要介紹了Linux如何定時(shí)刪除7天前的日志文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解Ubuntu 16.04 pycharm設(shè)置桌面快捷啟動(dòng)方式

    詳解Ubuntu 16.04 pycharm設(shè)置桌面快捷啟動(dòng)方式

    本篇文章主要介紹了Ubuntu 16.04 pycharm設(shè)置桌面快捷啟動(dòng)方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Linux使用sosreport實(shí)現(xiàn)生成系統(tǒng)報(bào)告

    Linux使用sosreport實(shí)現(xiàn)生成系統(tǒng)報(bào)告

    sosreport?命令是許多?Linux?發(fā)行版上可用的工具,特別是基于?Red?hat?的系統(tǒng),下面我們來看看如何使用sosreport實(shí)現(xiàn)生成系統(tǒng)報(bào)告吧
    2025-02-02
  • Linux系統(tǒng)添加IP白名單的流程步驟

    Linux系統(tǒng)添加IP白名單的流程步驟

    這篇文章主要介紹了如何在不同Linux系統(tǒng)上配置IP白名單以增強(qiáng)服務(wù)器安全,包括使用ufw和iptables兩種方法,并強(qiáng)調(diào)了配置的注意事項(xiàng),需要的朋友可以參考下
    2026-01-01
  • centos 7 修改sshd | 禁止 root登錄及sshd端口腳本定義

    centos 7 修改sshd | 禁止 root登錄及sshd端口腳本定義

    這篇文章主要介紹了centos 7 修改sshd | 禁止 root登錄及sshd端口腳本定義,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

湖南省| 宿州市| 辉南县| 新竹市| 阜城县| 衡南县| 临邑县| 尤溪县| 孙吴县| 阜康市| 阿鲁科尔沁旗| 南木林县| 道真| 嘉义县| 迁西县| 景泰县| 大同市| 隆子县| 博湖县| 厦门市| 鄂尔多斯市| 苏州市| 嘉峪关市| 五台县| 尼勒克县| 大名县| 阳信县| 监利县| 丹阳市| 景洪市| 商河县| 锡林浩特市| 砚山县| 芦溪县| 杂多县| 内江市| 华宁县| 克东县| 师宗县| 云林县| 辽源市|