Каким процессом занята папка linux

What Process is using all of my disk IO [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

If I use «top» I can see what CPU is busy and what process is using all of my CPU. If I use «iostat -x» I can see what drive is busy. But how do I see what process is using all of the drive’s throughput?

Well, technically that is true for Linux too, since user processes only modify pages in the page cache. 😉

Just the question I had and the answer I was looking for but doesn’t this kind of question fit better at SuperUser?

And this is why Linux is inferior to Solaris and MacOS because they have dtrace built in that makes this trivially simple to find out :-/

7 Answers 7

You’re looking for iotop (assuming you’ve got kernel >2.6.20 and Python 2.5). Failing that, you’re looking into hooking into the filesystem. I recommend the former.

iotop seems to be showing I/O bandwidth rather than the number of IOPS consumed by processes. This is not super relevant. A process doing lots of small writes+sync is going to consume more of the disk’s IO capacity than a process writing a large contiguous batch of data at high speed.

For small writes all I saw was [jdb2/nvme0n1p1] in iotop, but I got lucky with enabling /proc/sys/vm/block_dump and comparing the output to a healthy/stable system lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/… It helped find a docker container that was continuously spawning kubectl requests, exhausting an EBS volume’s burst credits with entries in /home/spinnaker/.kube/cache/discovery/. /serverresources.json . Once you narrow things down to a user/process name something like iotop -atku systemd-network | grep kubectl may also help

To find out which processes in state ‘D’ (waiting for disk response) are currently running:

while true; do date; ps aux | awk »; sleep 1; done

Wed Aug 29 13:00:46 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:47 CLT 2012 Wed Aug 29 13:00:48 CLT 2012 Wed Aug 29 13:00:49 CLT 2012 Wed Aug 29 13:00:50 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:51 CLT 2012 Wed Aug 29 13:00:52 CLT 2012 Wed Aug 29 13:00:53 CLT 2012 Wed Aug 29 13:00:55 CLT 2012 Wed Aug 29 13:00:56 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:57 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:58 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:00:59 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:01:00 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:01:01 CLT 2012 root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush] root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] Wed Aug 29 13:01:02 CLT 2012 Wed Aug 29 13:01:03 CLT 2012 root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8] 

As you can see from the result, the jdb2/dm-0-8 (ext4 journal process), and kdmflush are constantly block your Linux.

Читайте также:  Show directory command linux

For more details this URL could be helpful: Linux Wait-IO Problem

Being AWK pedantic, I’d rather like awk ‘$8==»D»‘; . AWK statements are condition < action >. No need for if if test is put outside of actions, in condition part. And print $0 is implicit if no other action is specified.

atop also works well and installs easily even on older CentOS 5.x systems which can’t run iotop. Hit d to show disk details, ? for help.

ATOP - mybox 2014/09/08 15:26:00 ------ 10s elapsed PRC | sys 0.33s | user 1.08s | | #proc 161 | #zombie 0 | clones 31 | | #exit 16 | CPU | sys 4% | user 11% | irq 0% | idle 306% | wait 79% | | steal 1% | guest 0% | cpu | sys 2% | user 8% | irq 0% | idle 11% | cpu000 w 78% | | steal 0% | guest 0% | cpu | sys 1% | user 1% | irq 0% | idle 98% | cpu001 w 0% | | steal 0% | guest 0% | cpu | sys 1% | user 1% | irq 0% | idle 99% | cpu003 w 0% | | steal 0% | guest 0% | cpu | sys 0% | user 1% | irq 0% | idle 99% | cpu002 w 0% | | steal 0% | guest 0% | CPL | avg1 2.09 | avg5 2.09 | avg15 2.09 | | csw 54184 | intr 33581 | | numcpu 4 | MEM | tot 8.0G | free 81.9M | cache 2.9G | dirty 0.8M | buff 174.7M | slab 305.0M | | | SWP | tot 2.0G | free 2.0G | | | | | vmcom 8.4G | vmlim 6.0G | LVM | Group00-root | busy 85% | read 0 | write 30658 | KiB/w 4 | MBr/s 0.00 | MBw/s 11.98 | avio 0.28 ms | DSK | xvdb | busy 85% | read 0 | write 23706 | KiB/w 5 | MBr/s 0.00 | MBw/s 11.97 | avio 0.36 ms | NET | transport | tcpi 2705 | tcpo 2008 | udpi 36 | udpo 43 | tcpao 14 | tcppo 45 | tcprs 1 | NET | network | ipi 2788 | ipo 2072 | ipfrw 0 | deliv 2768 | | icmpi 7 | icmpo 20 | NET | eth0 ---- | pcki 2344 | pcko 1623 | si 1455 Kbps | so 781 Kbps | erri 0 | erro 0 | drpo 0 | NET | lo ---- | pcki 423 | pcko 423 | si 88 Kbps | so 88 Kbps | erri 0 | erro 0 | drpo 0 | NET | eth1 ---- | pcki 22 | pcko 26 | si 3 Kbps | so 5 Kbps | erri 0 | erro 0 | drpo 0 | PID RDDSK WRDSK WCANCL DSK CMD 1/1 9862 0K 53124K 0K 98% java 358 0K 636K 0K 1% jbd2/dm-0-8 13893 0K 192K 72K 0% java 1699 0K 60K 0K 0% syslogd 4668 0K 24K 0K 0% zabbix_agentd 

This clearly shows java pid 9862 is the culprit.

Читайте также:  Настройки панелей в линукс

Источник

How find out which process is using a file in Linux?

You can use the fuser command, which is part of the psmisc package, like:

You will receive a list of processes using the file.

You can use different flags with it, in order to receive a more detailed output.

You can find more info in the fuser’s Wikipedia article, or in the man pages.

@khris, might be that not all fuser implementations are the same, or works the same way. Even if -i is defined in POSIX, the particular implementation you are using does not necessarily has the same options as the ones described in the Wikipedia article. For example, I’m using AIX right now, and the fuser available in this system does not have the -i option either.

For some reason, neither fuser nor lsof were working for me on a virtualbox guest. This answer saved me.

@jim’s answer is correct — fuser is what you want.

Additionally (or alternately), you can use lsof to get more information including the username, in case you need permission (without having to run an additional command) to kill the process. (THough of course, if killing the process is what you want, fuser can do that with its -k option. You can have fuser use other signals with the -s option — check the man page for details.)

For example, with a tail -F /etc/passwd running in one window:

ghoti@pc:~$ lsof | grep passwd tail 12470 ghoti 3r REG 251,0 2037 51515911 /etc/passwd 

Note that you can also use lsof to find out what processes are using particular sockets. An excellent tool to have in your arsenal.

Источник

Как узнать PID процесса в Linux

Каждый процесс в операционной системе имеет свой уникальный идентификатор, по которому можно получить информацию об этом процессе, а также отправить ему управляющий сигнал или завершить.

В Linux такой идентификатор называется PID, и узнать его можно несколькими способами. В этой статье мы рассмотрим, как узнать PID процесса в Linux, а также зачем это может вам понадобиться.

Как узнать pid процесса Linux

1. ps

Самый распространённый способ узнать PID Linux — использовать утилиту ps:

ps aux | grep имя_процесса

Кроме нужного нам процесса, утилита также выведет PID для grep, ведь процесс был запущен во время поиска. Чтобы его убрать, добавляем такой фильтр:

ps aux | grep имя_процесса | grep -v grep

Например, узнаём PID всех процессов, имя которых содержит слово «Apache»:

ps aux | grep apache | grep -v grep

2. pgrep

Если вам не нужно видеть подробную информацию о процессе, а достаточно только PID, то можно использовать утилиту pgrep:

По умолчанию утилита ищет по командной строке запуска процесса, если нужно искать только по имени процесса, то надо указать опцию -f:

3. pidof

Эта утилита ищет PID конкретного процесса по его имени. Никаких вхождений, имя процесса должно только совпадать с искомым:

С помощью опции -s можно попросить утилиту выводить только один PID:

Читайте также:  Nano linux сохранить файл

4. pstree

Утилита pstree позволяет посмотреть список дочерних процессов для определённого процесса, также их pid-идентификаторы. Например, посмотрим дерево процессов Apache:

Как узнать PID скрипта

Когда вы запускаете скрипт в оболочке, например Bash запускается процесс известный как подоболочка и выполняет последовательно все команды скрипта. Чтобы узнать PID процесса подоболочки Bash, запущенной для скрипта, обратитесь к специальной переменной $$. Эта переменная доступна только для чтения, поэтому вы не сможете ее редактировать:

#!/bin/bash
echo «PID этого скрипта: $$»

Каким процессом занят файл Linux

Выше мы рассмотрели, как получить PID процесса Linux по имени, а теперь давайте узнаем PID по файлу, который использует процесс. Например, мы хотим удалить какой-либо файл, а система нам сообщает, что он используется другим процессом.

С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:

В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:

Здесь будет выведен только файл и PID процесса. После PID идёт одна буква, которая указывает, что делает этот процесс с файлом или папкой:

  • c — текущая директория;
  • r — корневая директория;
  • f — файл открыт для чтения или записи;
  • e — файл выполняется как программа;
  • m — файл подключен в качестве библиотеки.

Кто использовал файл в Linux

Узнать процесс, который сейчас занимает файл, достаточно просто. Но как узнать, какой процесс обращается к файлу не надолго, например, выполняет его как программу или читает оттуда данные? Эта задача уже труднее, но вполне решаема с помощью подсистемы ядра auditd. В CentOS набор программ для работы с этой подсистемой поставляется по умолчанию, в Ubuntu же его придётся установить командой:

Теперь создаём правило для мониторинга. Например, отследим, кто запускает утилиту who:

auditctl -w /usr/bin/who -p x -k who_exec

Здесь -w — адрес файла, который мы будем отслеживать, —p — действие, которое нужно отслеживать, —k — произвольное имя для правила. В качестве действия могут использоваться такие варианты:

Теперь выполним один раз who и посмотрим, что происходит в логе с помощью команды ausearch:

sudo ausearch -i -k who_exec

Здесь в секции SYSCALL есть PID процесса, под которым была запущена программа, а также PPID — программа, которая запустила нашу who. Копируем этот PID и смотрим информацию о нём с помощью ps:

Становиться понятно, что это bash.

Какой процесс использует порт в Linux

Иногда необходимо узнать PID Linux-программы, которая использует сетевой порт, например 80. Для этого можно использовать утилиту ss:

Мы видим, что это несколько процессов Apache. Использовав опцию dport, можно узнать, какой процесс отправляет данные на указанный порт:

Выводы

В этой статье мы рассмотрели, как узнать PID процесса в Linux по различным условиям: имени или файлу. Как видите, всё достаточно просто, и в считанные минуты можно можно понять, что происходит с вашей операционной системой, и какой процесс за это отвечает.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector