mardi 30 janvier 2018

Allowed memory size of *** bytes exhausted even after adjusting php.ini

Suddenly this line

$data_to_send = @file_get_contents($source);

giving me an error

{"error":{"type":"Symfony\Component\Debug\Exception\FatalErrorException","message":"Allowed memory size of 536870912 bytes exhausted (tried to allocate 353912831 bytes)","file":"/home/forge/site/app/commands/ExportProductsDiff.php","line":157}}

I already upgrade my Linode VM to this plan already and still didn't seeing the error.

enter image description here


ExportProductsDiff.php

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class ExportProductsDiff extends Command {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'products:exportdiff';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Export all products to Diff.';

    /**
     * The system export message.
     *
     * @var string
     */
    protected $system_message = '[System Diff Export]';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function fire()
    {

        // Export the products by calling the ExportProducts Command
        $options = [
            '--format'          => "distributor",
            '--encoding'        => "standard csv",
            '--categories'      => "all categories",
            '--conjugate'       => 1,
            '--export_notes'    => $this->system_message
        ];

        if($this->option('interval') == 'daily'){
            $options['--date_range'] = date('Y-m-d');
            $options['--include_disabled'] = 1;

        }else if($this->option('interval') == 'daily active'){

            $options['--date_range'] = date('Y-m-d H:i:s');
            // $options['--include_disabled'] = 0; //active only
            // $options['--date_range'] = date('Y-m-d H:i:s',strtotime("-1 days"));
            $options['--include_disabled'] = 1; //include_disabled requested by Xixi on 6/6

        }else if($this->option('interval') == 'weekly active'){

            $options['--include_disabled'] = 0; //active only

        }else if($this->option('interval') == 'weekly'){

            $options['--include_disabled'] = 1;

        }else{

        }

        // Run the export
        $this->call('products:export', $options);

        $last_run_export = ProductExport::where('notes', '=', $this->system_message)
            ->where('status', '=', 'finished')
            ->where('format', '=', 'distributor')
            ->orderBy('id', 'desc')
            ->firstOrFail();
        $this->info('Export created successfully. Export ID is ' . $last_run_export->id);

        $env = $this->option('env');

        if ($env == NULL ){
            $localdomain = 'site.com';
        }else{
            $localdomain = 'site';
        }

        $sftp_server = '1.1.1.1';
        $sftp_user_name = 'site';
        $sftp_user_pass = '######!';

        // Open the SFTP connection
        $connection = @ssh2_connect($sftp_server);
        if (!$connection)
        {
            throw new Exception("Could not connect to $sftp_server.");
        }

        // Login to the SFTP server
        if (! @ssh2_auth_password($connection, $sftp_user_name, $sftp_user_pass))
        {
            throw new Exception("Could not authenticate with username $sftp_user_name " .
                "and password $sftp_user_pass.");
        }
        $sftp = @ssh2_sftp($connection);
        if (!$sftp)
        {
            throw new Exception("Could not initialize SFTP subsystem.");
        }

        // Prepare the files
        $source = '/home/forge/' . $localdomain . '/files/product-exports/' . $last_run_export->file_name;


        if($this->option('interval') == 'daily'){
            $destination = '/inbound/products/include_disabled_product' . $last_run_export->file_name;
        }else if($this->option('interval') == 'daily active'){
            $destination = '/inbound/products/active_only_product' . $last_run_export->file_name;
        }else if($this->option('interval') == 'weekly active'){
            $destination = '/inbound/products/weekly_active_only_full_product_' . $last_run_export->file_name;
        }else if($this->option('interval') == 'weekly'){
            $destination = '/inbound/products/weekly_include_disabled_full_product_' . $last_run_export->file_name;
        }else{}


        $this->info('Source: ' . $source);
        $this->info('Destination: ' . $destination);

        if (!file_exists('/inbound/products/')) {
            ssh2_sftp_mkdir($sftp, '/inbound/products/', 0775, true);
        }

        if (file_exists($source)) {
            chmod($source, 0775);
        }else{
            $this->info('$source NOT exist !');
        }

        // Upload the file
        $stream = @fopen("ssh2.sftp://$sftp$destination", 'w');

        if (!$stream)
        {
            throw new Exception("Could not open file: $destination");
        }

        $data_to_send = @file_get_contents($source);
        if ($data_to_send === false)
        {
            throw new Exception("Could not open local file: $source.");
        }

        if (@fwrite($stream, $data_to_send) === false)
        {
            throw new Exception("Could not send data from file: $source.");
        }

        @fclose($stream);

        // Delete the export when finished
        if (file_exists(base_path() . ProductExport::path . $last_run_export->file_name))
        {
            unlink(base_path() . ProductExport::path . $last_run_export->file_name);
        }
        $last_run_export->delete();
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return array();
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return array(
            array('interval', 'daily', InputOption::VALUE_REQUIRED,
                'Export interval from option selected to now. Options are "daily", and "weekly".', 'daily'),
            );
    }

}


I checked my php.ini, and have updated to

└── cat php.ini | grep _max                                                                                                         
log_errors_max_len = 1024
post_max_size = 2000M
upload_max_filesize = 2000M
session.gc_maxlifetime = 1440
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
┌──[root@iggy]──[/etc/php5/fpm] 
└── 

As you can see, I increase the memory allow to 2000M already.

I also reboot my php-fpm right that

service php5-fpm restart

I still face the same issue, did I change the wrong file?

How do I double check ?


Questions

How would one go about and debug this further ?


I'm open to any suggestions at this moment.

Any hints/suggestions / helps on this be will be much appreciated!



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire