Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Erlang i jego zużycie pamięci sterty

Nie miałem czasu zajrzeć do źródła, ale oto kilka komentarzy:

Pytanie 1. Dlaczego przy tak potężnym serwerze system operacyjny nie zapewnia takiej pamięci aplikacji (była to jedyna uruchomiona aplikacja)?

Ponieważ maszyna wirtualna Erlang próbowała zużywać więcej niż dostępna wolna pamięć.

Pytanie 2. Emulator Erlanga i start został poinstruowany, aby mógł odrodzić tyle procesów, ile może potrzebować. wartość +P 13421779. Czy maszyna wirtualna Erlang nie może uzyskać dostępu do tej pamięci lub nie może jej przydzielić do swoich procesów?

Nie. Gdyby skończyły się procesy, maszyna wirtualna Erlang tak powiedziałaby (a maszyna wirtualna nadal byłaby uruchomiona):

=ERROR REPORT==== 18-Aug-2011::10:04:04 ===
Error in process <0.31775.138> with exit value: {system_limit,[{erlang,spawn_link,    [erlang,apply,[#Fun<shell.3.130303173>,[]]]},{erlang,spawn_link,1},{shell,get_command,5},    {shell,server_loop,7}]}

Pytanie 3. Solaris widzi jeden proces:epmd, być może zawierający i rozpoczynający tysiące mikro wątków. Jakie konfiguracje mogą sprawić, że Solaris będzie w stanie nigdy nie zatrzymywać mojej aplikacji bez względu na to, jak bardzo jest „głodna pamięci”? Dostępna przestrzeń wymiany to 16 GB, RAM 20 GB, szczerze, coś musi być nie tak.

epmd jest demonem mapowania portów Erlang. Jest odpowiedzialny za zarządzanie rozproszonym Erlangiem i nie ma nic wspólnego z Twoją indywidualną aplikacją Erlang. Procesy, których powinieneś szukać, będą nazywać się beam.smp najprawdopodobniej. Pokazują one zużycie pamięci systemu operacyjnego przez maszynę wirtualną Erlang itp.

Pytanie 4. Jakie konfiguracje mogę wykonać w emulatorze Erlanga, aby uniknąć tych awaryjnych zrzutów pamięci, zwłaszcza gdy cała potrzebna pamięć jest dostępna na serwerze? Jak mam uruchamiać więcej aplikacji zużywających pamięć na tym serwerze, jeśli Erlang nadal nie może przydzielić takiej pamięci do prostego indeksatora systemu plików (cóż jest mocno współbieżny)?

Maszyna wirtualna Erlang powinna być w stanie wykorzystać całą dostępną pamięć w twoim komputerze. Jednak zależy to od tego, jak napisana jest Twoja aplikacja. Przyczyn wycieków pamięci może być wiele:

  • Wypełnianie tabeli atomów (tworzysz zbyt wiele unikalnych atomów)
  • Tabele ETS lub Mnesia nie są zbieranymi śmieciami (nie usuwasz starych, nieużywanych elementów)
  • Za mało pamięci dla procesów (odradzasz zbyt wiele procesów)
  • Utworzono zbyt wiele plików binarnych (możesz zachować nieużywane odniesienia do starych plików binarnych)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja INITCAP() w Oracle

  2. jak wstawić aktualną datę do pola DATE w formacie dd/mm/rrrr w Oracle

  3. ojdbc14.jar kontra ojdbc6.jar

  4. ORA-04091:tabela [blah] mutuje, wyzwalacz/funkcja może jej nie widzieć

  5. Problem z konwersją Oracle SQL DATE przy użyciu iBATIS przez Java JDBC