Как ограничить использование памяти golang? [Дубликат]

Быстрый доступ к пикселям возможен с использованием метода LockBits () растрового изображения . Это вернет вам объект, содержащий указатель на начало данных пикселя, и вы можете использовать небезопасный код для доступа к памяти.

http://www.bobpowell.net/lockingbits. HTM

7
задан George Thomas 31 July 2013 в 09:04
поделиться

1 ответ

Работает так, как ожидалось.

setrlimit (2) .

Мягкий предел - это значение, которое ядро ​​обеспечивает для соответствующего ресурс. Жесткий предел действует как потолок для мягкого предела: непривилегированный процесс может устанавливать только его мягкий предел до значения в диапазоне от 0 до жесткого предела и (необратимо) понижать его жесткий предел. Привилегированный процесс (в Linux: один с возможностью CAP_SYS_RESOURCE) может произвольно изменять либо предельное значение.

rlimit.go:

package main

import (
    "fmt"
    "syscall"
)

func main() {
    var rLimit syscall.Rlimit
    err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        fmt.Println("Error Getting Rlimit ", err)
    }
    fmt.Println(rLimit)
    rLimit.Max = 999999
    rLimit.Cur = 999999
    err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        fmt.Println("Error Setting Rlimit ", err)
    }
    err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        fmt.Println("Error Getting Rlimit ", err)
    }
    fmt.Println("Rlimit Final", rLimit)
}

Выход:

$ uname -a
Linux peterSO 3.8.0-26-generic #38-Ubuntu SMP Mon Jun 17 21:43:33 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ go build rlimit.go
$ ./rlimit
{1024 4096}
Error Setting Rlimit  operation not permitted
Rlimit Final {1024 4096}
$ sudo ./rlimit
[sudo] password for peterSO:
{1024 4096}
Rlimit Final {999999 999999}

UPDATE:

Я успешно побежал rlimit.go для linux/amd64, вам не удалось выполнить linux/386. Были ошибки Go в Getrlimit и Setrlimit для 32-разрядных дистрибутивов Linux.

Используя ветвь Go default tip (чтобы включить исправления ошибок), запустите следующее и обновите свой вопрос с результатами.

$ uname -a
Linux peterSO 3.8.0-26-generic #38-Ubuntu SMP Mon Jun 17 21:46:08 UTC 2013 i686 i686 i686 GNU/Linux
$ go version
go version devel +ba52f6399462 Thu Jul 25 09:56:06 2013 -0400 linux/386
$ ulimit -Sn
1024
$ ulimit -Hn
4096
$ go build rlimit.go
$ ./rlimit
{1024 4096}
Error Setting Rlimit  operation not permitted
Rlimit Final {1024 4096}
$ sudo ./rlimit
[sudo] password for peterSO: 
{1024 4096}
Rlimit Final {999999 999999}
$ 
14
ответ дан peterSO 16 August 2018 в 02:25
поделиться
  • 1
    У вас есть идея, почему это может не работать в моем случае? – George Thomas 24 July 2013 в 04:51
  • 2
    @GeorgeThomas Как указал PeterSO: вы используете приложение с привилегиями суперпользователя? – elithrar 24 July 2013 в 05:06
  • 3
    Я пробовал в обоих направлениях, и все равно это было то же самое. – George Thomas 24 July 2013 в 05:08
  • 4
    @GeorgeThomas: Да. Ваш выход uname говорит i686, мой говорит x86_64. Я должен настроить 32-разрядную виртуальную машину для завершения отладки. – peterSO 24 July 2013 в 08:28
  • 5
    Мне также было интересно узнать значение тока. ulimit -n возвращает 999999, но это другое. – George Thomas 24 July 2013 в 13:41
Другие вопросы по тегам:

Похожие вопросы: