Собственного ATI нужно избежать любой ценой.
Я пытался использовать тот приблизительно в 2001 - (возможно, было собственным или открытым, я забываю).. это составило мою систему.
Я пытался использовать тот в 2011 - он составил мою систему.
До ATI собирают их дерьмо, я остался бы хорошо далеко от их продукта.
О, да, даже когда им удалось работать, это не были незначительные незначительные сбои, это было полностью искажено экраны и противные твердые катастрофические отказы в изобилии.
Работа Nvidia хорошо, но может помешать установке ультрасовременных или пользовательских ядер.
Intel кажется самой низкой спецификацией, я не использовал их, но казаться вложить капитал в открытый исходный код, я знаю, что некоторые парни Red Hat клянутся ими.
Если Вы действительно имеете достаточно RAM в наличии снова, можно использовать эту последовательность (в качестве корня):
$ swapoff -a
$ swapon -a
(для принуждения явной загрузки всех приложений)
(предполагающий, что Вы используете Linux),
Следующий быстрый-и-грязный сценарий Python выводит память процесса к stdout. Это имеет побочный эффект загрузки, любой выгрузил файл подкачки или отображаемый файл. Назовите его как cat_proc_mem 123 456 789
где аргументами являются идентификаторы процесса.
Этот сценарий абсолютно характерен для Linux. Это может быть адаптируемо к другим системам с подобным /proc
структура (Солярис?), но забывают о работе его, например, *BSD. Даже на Linux, Вы, возможно, должны изменить определение c_pid_t
и значения PTRACE_ATTACH
и PTRACE_DETACH
. Это - сценарий доказательства принципа, не предназначенный как пример хороших практик программирования. Используйте на Ваш собственный риск.
Linux делает память к процессу доступной как /proc/$pid/mem
. Только определенные диапазоны адресов читаемы. Эти диапазоны могут быть найдены путем чтения информация размещения в ОЗУ из текстового файла /proc/$pid/maps
. Псевдофайл /proc/$pid/mem
не может быть считан всеми процессами, которые имеют разрешение считать его: процесс читателя, должно быть, звонил ptrace(PTRACE_ATTACH, $pid)
.
#!/usr/bin/env python
import ctypes, re, sys
## Partial interface to ptrace(2), only for PTRACE_ATTACH and PTRACE_DETACH.
c_ptrace = ctypes.CDLL("libc.so.6").ptrace
c_pid_t = ctypes.c_int32 # This assumes pid_t is int32_t
c_ptrace.argtypes = [ctypes.c_int, c_pid_t, ctypes.c_void_p, ctypes.c_void_p]
def ptrace(attach, pid):
op = ctypes.c_int(16 if attach else 17) #PTRACE_ATTACH or PTRACE_DETACH
c_pid = c_pid_t(pid)
null = ctypes.c_void_p()
err = c_ptrace(op, c_pid, null, null)
if err != 0: raise SysError, 'ptrace', err
## Parse a line in /proc/$pid/maps. Return the boundaries of the chunk
## the read permission character.
def maps_line_range(line):
m = re.match(r'([0-9A-Fa-f]+)-([0-9A-Fa-f]+) ([-r])', line)
return [int(m.group(1), 16), int(m.group(2), 16), m.group(3)]
## Dump the readable chunks of memory mapped by a process
def cat_proc_mem(pid):
## Apparently we need to ptrace(PTRACE_ATTACH, $pid) to read /proc/$pid/mem
ptrace(True, int(pid))
## Read the memory maps to see what address ranges are readable
maps_file = open("/proc/" + pid + "/maps", 'r')
ranges = map(maps_line_range, maps_file.readlines())
maps_file.close()
## Read the readable mapped ranges
mem_file = open("/proc/" + pid + "/mem", 'r', 0)
for r in ranges:
if r[2] == 'r':
mem_file.seek(r[0])
chunk = mem_file.read(r[1] - r[0])
print chunk,
mem_file.close()
## Cleanup
ptrace(False, int(pid))
if __name__ == "__main__":
for pid in sys.argv[1:]:
cat_proc_mem(pid)
См. также больше информации о /proc/$pid/mem
.
unswap () {
cat_proc_mem "$@" >/dev/null
}
kill -CONT 1234
где 1234 является PID) возобновлять его.
– Gilles 'SO- stop being evil'
21.03.2017, 16:47
swapon/swapoff будет абсолютно ясный Ваша область подкачки, но можно освободить часть от него через/proc файловую систему также. Вы хотите первый:
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
с помощью http://linux-mm.org/Drop_Caches
sysctl vm.drop_caches=X
. Кроме того, sysctl легче к sudo.
– Juliano
22.01.2011, 01:59
Только для полноты, GDB может вывести образ процесса. Я не проверял, что это не подкачивает его, но это имеет к---нет никакого другого способа считать целую память процесса:
gdb -p $mypid
сопровождаемый
(gdb) gcore /tmp/myprocess-core
Saved corefile /tmp/myprocess-core
gcore $pid
также доступно за пределами gdb (как маленький сценарий обертки)
– Tobu
15.01.2014, 14:36
gdb --batch -p $pid -ex "gcore /dev/null" 2>/dev/null
– hackerb9
24.07.2017, 21:11